MongoDB如何获取集合中第n个文档?解决slice语法错误问题
解决MongoDB获取集合中排序后第n个/前n个文档的问题
你之前的写法错误在于混淆了文档内数组字段的截取和集合层面的文档截取:$和$slice在projection中是用来处理单个文档内部的数组字段(比如某个字段是数组,截取该数组的前N个元素),不能用来对集合的文档列表做截取。
根据你的需求,分两种场景给出实现方式:
场景1:获取排序后的前n个文档
如果要获取按timestamp降序排序后的前nPosition个文档,直接用limit()方法:
result = await db.collection(col_name) .find() .sort({ timestamp: -1 }) .limit(nPosition) .toArray();
场景2:获取排序后的第n个单个文档
如果要获取排序后的第N个文档(注意:skip()的参数从0开始计数,比如要取第3个文档,需要skip(2)),可以结合skip()和limit(1):
// 假设nPosition是目标文档的索引(从0开始) result = await db.collection(col_name) .find() .sort({ timestamp: -1 }) .skip(nPosition) .limit(1) .toArray(); // 结果是包含单个文档的数组,取result[0]即可得到目标文档 // 或者直接用findOne简化写法 result = await db.collection(col_name) .findOne({}, { sort: { timestamp: -1 }, skip: nPosition });
内容的提问来源于stack exchange,提问作者Diogo Santos
相关产品推荐
相关产品推荐

