const list = async function({
end_cursor = 0
} = {}) {
return await db.collection.find().sort({ _id: -1 }).skip(end_cursor).limit(50);
}
上面是我认为应该可以使用的代码,但是我发现它不起作用。这是显而易见的:
let list1 = await list(0);
list1 = list1.reduce((o, a)=>{
let {
_id
} = a;
o[_id] = true;
return o;
}, {});
let list2 = await list(50);
for (let i of list2) {
let {
_id
} = i;
if (list1[_id]) {
console.log('repeated');
break;
}
}
如果db.collection.find().sort({ _id: -1 }).skip(end_cursor).limit(50)
有效,则list1和list2应该具有唯一的_id
,但它们不是唯一的,而是控制台输出repeat
。
答案 0 :(得分:0)
您可以根据需要使用聚合。
db.collection.aggregate([
{$sort: {_id: -1}},
{$skip: end_cursor}, //value should be a positive integer
{$limit: 50}
]);