文档{"m":[1,2,3], "others":xxx}
,通过以下方式获取数组'm'中的第一个元素:
db.find({query},{"m":{$slice:1}, "m":1})
返回值为{"m":[1]}
,doc中的元素为数组。但是在这个查询中,数组中只有一个元素会被获取,所以我不需要返回doc包含只有一个元素的数组。这就像子查询中的SQL局部变量。我想要的元素在原始文档中没有名称,如果我想要它,那么我需要为它命名,我想要的文档就像:{“localVariable”:1}而不是{“m”:[1 ]}
我尝试通过以下方式展开第一个元素:
db.find({query},{"m":{$slice:1}, "m.1":1})
但这不起作用。
答案 0 :(得分:0)
您似乎在寻找positional $
运营商匹配。它的工作原理如下:
db.collection.find({ m: 2 },{ "m.$": 1 })
这会返回匹配的元素
如果您实际上希望始终获取第二个元素,那么您需要$slice
的两个参数形式:
db.collection.find({ },{ "m": { "$slice": [1,1] } })
测试输出:
db.test.insert({ m: [1,2,3] })
db.test.find({ },{ "m": {$slice: [1,1]} })
{ "_id" : ObjectId("5323cc2770fde63cf1146ba3"), "m" : [ 2 ] }