{
"name": "sample_config222",
"data": [
{
"id": 1,
"first_name": "George",
"last_name": "Bluth",
},
{
"id": 2,
"first_name": "Janet",
"last_name": "Bluth",
},
]
}
我想找到一个文件中匹配key: value
所有词典。这里是两件事情,
"name": "sample_config222"
文档1
选择。我试过了
db.config.find({name: "sample_config"}, {"data": { $elemMatch: { "last_name": "Bluth" } } })
它仅示出一个词典,其是第一个
{
"name": "sample_config222",
"data": [
{
"id": 1,
"first_name": "George",
"last_name": "Bluth",
}
}
并且还越来越结果从其他文档中包含"last_name": "Bluth"
我试图与$and
其表示整个文档。
更新:
存在使用here仅返回一个在阵列字典类似的问题$elematch
。但我想获得两者匹配查询所有类型的字典
您所提供的查询,
db.config.find({name: "sample_config"}, {"data": { $elemMatch: { "last_name": "Bluth" } } })
打破了这个
data.last_name
等于Bluth
。这里的关键是,find
的方法需要多个参数。
function (query, fields, limit, skip, batchSize, options)
这些可以通过在壳执行find
命令不带括号中找到。这适用于所有的shell命令,如果你忘记了怎么使用一个命令是非常有用的。
db.config.find
为了得到你想要的结果,你需要查询改成这样:
{name: "sample_config", "data": { $elemMatch: { "last_name": "Bluth" } } }
请注意,我删除}
后"sample_config"
和{
之前删除"data"
,使之成为find
命令而不是query
和project
文档中的单个查询文档。
更新:
我知道你还希望投影的结果文档做阵列场只包含匹配的元素。现在,我们只需要原来的投影与新的查询相结合
db.col.find({name: "sample_config", "data": { $elemMatch: { "last_name": "Bluth" } } }, {"data": { $elemMatch: { "last_name": "Bluth" } } })
这将返回表格的文件
{
_id: xxx,
data: [
{ id: xxx, first_name: xxx, last_name: "Bluth" }
]
}
然而,根据the docs,这将只返回第一匹配的数组元素,不是所有的匹配元素。
如果您需要进一步向下突出的数据,我会建议使用的聚合框架,因为这些运营商更稳健。
这可能看起来像
db.col2.aggregate({$match: {name: "sample_config", "data": { $elemMatch: { "last_name": "Bluth" } } }},{$unwind:"$data"},{$match:{"data.last_name": "Bluth"}},{$replaceRoot:{newRoot:"$data"}})
这会导致下面的输出
{ "id" : 1, "first_name" : "George", "last_name" : "Bluth" }
{ "id" : 2, "first_name" : "Janet", "last_name" : "Bluth" }
{ "id" : 2, "first_name" : "Janet", "last_name" : "Bluth" }
从这些原始凭证
{ "_id" : ObjectId("5c5b025fea781cb935c975ae"), "name" : "sample_config", "data" : [ { "id" : 1, "first_name" : "George", "last_name" : "Bluth" }, { "id" : 2, "first_name" : "Janet", "last_name" : "Bluth" } ] }
{ "_id" : ObjectId("5c5b0283ea781cb935c975af"), "name" : "sample_config", "data" : [ { "id" : 1, "first_name" : "George", "last_name" : "Dole" }, { "id" : 2, "first_name" : "Janet", "last_name" : "Bluth" } ] }
{ "_id" : ObjectId("5c5b028bea781cb935c975b0"), "name" : "sample_config", "data" : [ { "id" : 1, "first_name" : "George", "last_name" : "Dole" }, { "id" : 2, "first_name" : "Janet", "last_name" : "Johnson" } ] }
您在这里可以找到这些操作符的文档: