首页 > 解决方案 > mongodb - 如何从数组中获取有限数量的项目

问题描述


是否有可能以某种方式从数组中获取有限数量的项目?现在我只能获取完整的用户数据,但我想要一个分页,我可以从用户数据中加载有限数量的任务


async getUserTasks( _id, _limit ) {
    try {
        await UserModel.find( {
            _id: _id,
            "tasks": { $size: _limit }
        } );
    } catch ( e ) {
        console.log( e );
    }
}

在此处输入图像描述

标签: reactjsmongodb

解决方案


用于limit限制可以从读取操作返回的文档数。limit用作操作可以返回的最大文档数的上限,但如果没有足够的文档达到限制,则该操作可以返回较少数量的文档。如果limit与该skip方法一起使用,则skip首先应用,并且限制仅适用于skip.

按照以下示例中的说明将数据插入到集合中,并仅返回使用排序、跳过和限制的查询的某些结果。考虑以下描述书籍的文档集合:

[
  { "_id": 1, "name": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 },
  { "_id": 2, "name": "Les Misérables", "author": "Hugo", "length": 1462 },
  { "_id": 3, "name": "Atlas Shrugged", "author": "Rand", "length": 1088 },
  { "_id": 4, "name": "Infinite Jest", "author": "Wallace", "length": 1104 },
  { "_id": 5, "name": "Cryptonomicon", "author": "Stephenson", "length": 918 },
  { "_id": 6, "name": "A Dance With Dragons", "author": "Tolkein", "length": 1104 },
]

限制

以下示例查询集合以返回前三本最长的书。它将所有文档与查询匹配,对长度字段应用排序以在书籍之前返回长度较长的书籍,并应用限制以仅返回 3 个结果:

// define an empty query document
const query = {};
// sort in descending (-1) order by length
const cursor = collection.find(query).sort({ length: -1 }).limit(3);
await cursor.forEach(console.dir);

上面的代码示例输出以下三个文档,按长度排序:

{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }
{ "_id": 6, "title": "A Dance With Dragons", "author": "Martin", "length": 1104 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }

推荐阅读