a doc {"m":[1,2,3], "others":xxx},通过以下方式获取数组 'm' 中的第一个元素:
db.find({query},{"m":{$slice:1}, "m":1})
Run Code Online (Sandbox Code Playgroud)
返回的是{"m":[1]},doc中的元素是一个数组。但在这个查询中,只会获取数组中的一个元素,因此我不需要返回文档包含只有一个元素的数组。这就像子查询中的 SQL 局部变量。我想要的元素在原始文档中没有名称,如果我想获取它,那么我需要为它命名,我想要的返回文档类似于: {"localVariable":1} 而不是 {"m":[1 ]}
我尝试通过以下方式投影出第一个元素:
db.find({query},{"m":{$slice:1}, "m.1":1})
Run Code Online (Sandbox Code Playgroud)
但这行不通。
您似乎正在寻找位置$运算符匹配。它的工作原理如下:
db.collection.find({ m: 2 },{ "m.$": 1 })
Run Code Online (Sandbox Code Playgroud)
这将返回您匹配的元素
如果您实际上希望始终获得第二个元素,那么您需要以下两个参数形式$slice:
db.collection.find({ },{ "m": { "$slice": [1,1] } })
Run Code Online (Sandbox Code Playgroud)
测试输出:
db.test.insert({ m: [1,2,3] })
db.test.find({ },{ "m": {$slice: [1,1]} })
{ "_id" : ObjectId("5323cc2770fde63cf1146ba3"), "m" : [ 2 ] }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2309 次 |
| 最近记录: |