使用 mongodb 获取具有限制和偏移量的 object 数组不起作用

Getting array of object with limit and offset doesn't work using mongodb

首先声明我是 mongodb 的新手。我正在尝试从 collection 获取数据 这是我 collection 学生的文档:

{
    "_id" : ObjectId("5979e0473f00003717a9bd62"),
    "id" : "l_7c0e37b9-132e-4054-adbf-649dbc29f43d",
    "name" : "Raj",
    "class" : "10th",
    "assignments" : [ 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc571",
            "name" : "1"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc572",
            "name" : "2"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc573",
            "name" : "3"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc574",
            "name" : "4"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc575",
            "name" : "5"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc576",
            "name" : "6"
        }
    ]
}

我需要的输出是

{
   "assignments" : [ 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc571",
                "name" : "1"
            }, 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc572",
                "name" : "2"
            }, 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc573",
                "name" : "3"
            }, 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc574",
                "name" : "4"
            }, 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc575",
                "name" : "5"
            }, 
            {
                "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc576",
                "name" : "6"
            }
        ]
}

对于此响应,我使用了以下查询

db.getCollection('student').find({},{"assignments":1})

现在我正在尝试的是对我尝试使用 $slice:[0,3] 的评论列表应用限制和偏移,但它给了我整个文档和切片结果 但不是单独的分配,所以我如何将这两者结合起来才能只获得具有限制和偏移量的分配。

你需要 aggregate 而不是 find 因为 aggregate 允许你投影+切片。

鉴于您问题中的文档,以下命令...

db.getCollection('student').aggregate([
    // project on assignments and apply a slice to the projection
    {$project: {assignments: {$slice: ['$assignments', 2, 5]}}}
])

...returns:

{
    "_id" : ObjectId("5979e0473f00003717a9bd62"),
    "assignments" : [ 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc573",
            "name" : "3"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc574",
            "name" : "4"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc575",
            "name" : "5"
        }, 
        {
            "id" : "v_539f65c2-9f45-4d92-b05e-973cf08cc576",
            "name" : "6"
        }
    ]
}

这表示 assignments 数组( assignments 数组)具有从元素 2 到 5 的切片。您可以更改切片参数(上例中的2, 5)应用您自己的偏移量和限制(其中第一个参数是偏移量,限制是第一个和第二个参数之间的差值)。

如果您想在上面添加匹配条件(以解决特定文档),那么您可以这样做:

db.getCollection('other').aggregate([
    /// match a specific document
    {$match: {"_id": ObjectId("5979e0473f00003717a9bd62")}},
    // project on assignments and apply a slice to the projection
    {$project: {assignments: {$slice: ['$assignments', 2, 5]}}}
])

有关匹配步骤的更多详细信息 here