获取具有限制和偏移量的对象数组无法使用 mongodb



首先让我说我是mongodb新手。我正在尝试从集合中获取数据 这是我收藏的学生中的文档:

{
"_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而不是findaggregate因为它允许你投影+切片。

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

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

。返回:

{
"_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"
}
]
}

这表示具有从元素 2 到 5 的切片的assignments数组(并且仅assignments数组)。您可以更改切片参数(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]}}}
])

有关比赛步骤的更多详细信息,请点击此处。

最新更新