And I have 2 documents in my database.
So, When $skip
is 0
, data
return one document.
const data = await MyData.aggregate([
{ $limit: 1 },
{ $skip: 0 },
])
But if I change $skip
to 1
, data
return empty array!
const data = await MyData.aggregate([
{ $limit: 1 },
{ $skip: 1 },
])
And if I change $limit
to 2
, data
return two documents!
const data = await MyData.aggregate([
{ $limit: 2 },
{ $skip: 0 },
])
CodePudding user response:
Order matters.
When you don't have a $match
at the start of the pipeline, there will be an implicit collection scan that reads all the documents in the collection.
When the {$limit: 1}
stage begins, all of the documents will be in the pipeline, when it completes, the output will be a single document, which is passed on to the next stage.
The {$skip: 1}
stage then skips the first document, and finding nothing else, returns an empty result set.
The solution here is to skip first, then limit.