我有一个像这样的集合中的文档,我需要找到form_Id:1和Function_Id:2的记录,如何编写mongo查询.
"Form_Id" : 1,
"Function" : [{
"Function_Id" : 1,
"Role" : [{
"Role_Id" : 1,
"UserId" : ["Admin", "001"]
}]
}, {
"Function_Id" : 2,
"Role" : [{
"Role_Id" : 2,
"UserId" : ["Admin", "005"]
}]
}]
Run Code Online (Sandbox Code Playgroud)
Joh*_*yHK 24
您可以使用点表示法和$位置投影运算符来执行此操作:
db.test.find({Form_Id: 1, 'Function.Function_Id': 2}, {_id: 0, 'Function.$': 1})
Run Code Online (Sandbox Code Playgroud)
收益:
{"Function": [{"Function_Id": 2, "Role": [{"Role_Id": 2, "UserId": ["Admin", "005"]}]}]}
Run Code Online (Sandbox Code Playgroud)
由于您的功能键是一个数组,为了使用$ match运算符,首先必须使用$ unwind运算符.http://docs.mongodb.org/manual/reference/aggregation/unwind/ 然后你使用$ match运算符来查找你想要的文件http://docs.mongodb.org/manual/reference/aggregation/match/
所以你的查询应该是这样的
db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}}])
Run Code Online (Sandbox Code Playgroud)
默认情况下,mongo将显示文档的_id.因此,如果您不想显示_id,在匹配相关的后,您可以使用$ project运算符http://docs.mongodb.org/manual/reference/aggregation/project/
db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}},{$project:{"_id":0,"Form_id":1,"Function":1}}])
Run Code Online (Sandbox Code Playgroud)
如果您不希望显示form_id,则只需在查询的项目部分中不指定form_id.默认情况下,mongo仅显示值为1的键.如果未提及该键,则不会显示该键.
db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}},{$project:{"_id":0,"Function":1}}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38784 次 |
| 最近记录: |