我需要从以下格式的文档中检索数据:
{
"id": ObjectId("alskdjflqkjwr23"),
"field1": {
"morefields": values
},
"field2": {
"morefields": values
},
"field3": {
"morefields": values
},
"field14": {
"morefields": values
},
"importantField": {
"subfield1": values,
"subfield2": values,
"importantArray": [
{
"subsubfield1": values,
"importantSubArray": [
{
"subsubsubfield1": values,
"subsubsubfield2": values
},
{
"subsubsubfield1": values,
"subsubsubfield2": values
}
],
"importantValue": values
},
{
"subsubfield1": values,
"subsubfield2": values,
"subsubfield3": values
}
]
}
}
我需要 importantSubArray 字段中的 importantValue 和元素,但如果没有其他字段中的所有额外数据,我无法让查询返回我需要的内容。我一周前才开始使用 Mongo。
我已经尝试过这个查询,但只有一个投影有效,具体取决于我放置它们的顺序。所以我可以只返回 importantField 中的数组,但返回所有 400 个左右的元素,而不仅仅是最后 2 个,或者我可以返回 importantField.importantArray 的最后 2 个元素,还可以返回所有其他字段、子字段、子子字段等。
db.getCollection("my_data").find({},
{
"importantField.importantArray" : 1.0,
"importantField.importantArray": { $slice: -2 }
}
);
我怎样才能让这两个同时工作?谢谢。
编辑:
预期的输出应该如下所示。我需要 importantSubArray 数组和 importantValue 字段中的元素
{
"importantSubArray": [
{
"stuff": morestuff
},
],
"importantValue": value
我能够通过使用聚合并在第一阶段投影我想要的字段,然后在第二阶段进行另一个投影并对最后 2 个元素进行切片,将 @prasad_ 的评论与切片结合起来。
db.my_data.aggregate([
{
$project:{
"importantArray":{
$slice:["$importantField.importantArray", -2]
}
}
},
{
$project:{
"importantArray.importantSubArray":1, "importantArray.importantValue":1,_id:0
}
},
{
$unwind:"$importantArray"
},
{
$replaceRoot:{newRoot:"$importantArray"}
}
])
上述查询的解释: