Hum*_*jät 5 multidimensional-array mongodb aggregation-framework
我刚开始学习MongoDB,无法找到解决问题的方法.
得到那个文件:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Run Code Online (Sandbox Code Playgroud)
请注意"arr"字段是一个多维数组.
现在我正在寻找一个只返回arr [0] [1]值22的查询.我试图通过使用$ slice来实现它,但是我不知道如何使用它来解决第二个维度.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Run Code Online (Sandbox Code Playgroud)
我也试过了
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Run Code Online (Sandbox Code Playgroud)
期望的输出也是
22
Run Code Online (Sandbox Code Playgroud)
要么
{"arr":[[22]]}
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:
阅读评论后,我认为我已经过多地简化了示例数据,我必须提供更多信息:
示例数据:
> db.test.insert({"name" : "Olivia", "arr" : [ [11, 22, 33, 44],[55,66,77,88],[99] ] })
> db.test.insert({"name" : "Walter", "arr" : [ [11], [22, 33, 44],[55,66,77,88],[99] ] })
> db.test.insert({"name" : "Astrid", "arr" : [ [11, 22, 33, 44],[55,66],[77,88],[99] ] })
> db.test.insert({"name" : "Peter", "arr" : [ [11, 22, 33, 44],[55,66,77,88],[99] ] })
Run Code Online (Sandbox Code Playgroud)
示例查询:
> db.test.find({name:"Olivia"},{"arr:"...})
Run Code Online (Sandbox Code Playgroud)
您可以使用聚合框架:
db.test.aggregate([
{ $unwind: '$arr' },
{ $limit: 1 },
{ $project: { _id: 0, arr: 1 } },
{ $unwind: '$arr' },
{ $skip: 1 },
{ $limit: 1 }
])
Run Code Online (Sandbox Code Playgroud)
返回:
{ "arr": 22 }
Run Code Online (Sandbox Code Playgroud)
编辑:原始海报修改了我的解决方案以满足他的需求,并提出了以下内容:
db.test.aggregate([
{ $match: { name:"Olivia" } },
{ $project: { _id: 0,arr: 1 } },
{ $unwind: '$arr' },
{ $skip: 1 },
{ $limit:1 },
{ $unwind: "$arr" },
{ $skip: 2 },
{ $limit: 1 }
])
Run Code Online (Sandbox Code Playgroud)
该查询将给出{ arr: 77 }
OP 提供的扩展数据。请注意,需要 $skip 和 $limit 来选择数组层次结构中的正确元素。