See Aggregate $sort multiple fields in order - #2 by Stennie and pay particular attention about using numeric field names.
Sorting multiple fields produces wrong order - #3 by Stennie is also of interest.
I strongly suggest you redesign your block accesses using Building with Patterns: The Attribute Pattern | MongoDB Blog to give something like:
{
user_id: 1000,
name: 'A',
blocks :
[
{ "block_id" : 1,
"accesses" : [
{_id: 100, 'value': 100, 'last_edited': 'DATE'},
{_id: 200, 'value': 100, 'last_edited': 'DATE'},
] },
{ "block_id" : 2,
"accesses" : [
{_id: 400, 'value': 120, 'last_edited': 'DATE'},
] }
]
}
to keep together the accesses of a given block. But, personally, I would use:
{
user_id: 1000,
name: 'A',
email: 'a@abc.com',
blocks :
[
{ block_id : 1 , _id: 100, 'value': 100, 'last_edited': 'DATE'},
{ block_id : 1 , _id: 200, 'value': 100, 'last_edited': 'DATE'},
{ block_id : 2 , _id: 400, 'value': 120, 'last_edited': 'DATE'},
]
}