我刚开始学习MongoDB,但是找不到解决我的问题的方法。
有一个文档:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
请注意"arr"字段,它是一个多维数组。
现在我正在寻找一个查询,只返回arr [0] [1]的值,即22。我尝试使用$slice来实现这一点,但我不知道如何处理第二个维度。
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
我也尝试了。
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
期望的输出结果应该是:
22
或者
{"arr":[[22]]}
谢谢
编辑:
在阅读评论后,我认为我简化了示例数据并且需要提供更多信息:
- 集合中有许多与我提供的那个文档结构相同的文档。
- 除了两个之外,还有更多的数组元素。
- 在真实世界中,数组包含非常长的文本(500kb-1mb),因此将整个数据传输到客户端非常昂贵。
- 在聚合之前,我将通过“name”字段进行查询。 仅出于简单起见,在示例中跳过了该部分。
- 目标索引是可变的,因此有时我需要知道arr [0] [1]的值,下一次是arr [1] [4]
示例数据:
> 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] ] })
示例查询:
> db.test.find({name:"Olivia"},{"arr:"...})
$match
可以始终获得一个期望的文档。 - Dmytro Shevchenko22
...”。我很确定他们只需要一个文档的值作为结果。 - Dmytro Shevchenko> db.test.aggregate([{$match: {name:"Olivia"}}, {$project: {_id:0,arr:1}},{ $unwind: '$arr' },{$skip: 1},{$limit:1},{$unwind:"$arr"},{$skip:2},{$limit:1}])
。您能否更新您的回答,这样我就可以将其标记为正确的答案? - Humppakäräjät