我有一个名为store的集合的mongo数据库。
mongo shell上的 db.store.find()
产生以下内容。
{ "_id" : ObjectId("575d6fab0cde6714290f444f"), "train" : "a", "data" : { "0" : { "this" : 21, "that" : 31, "value" : 11, "month" : 1 }, "3" : { "this" : 21, "that" : 34, "value" : 14, "month" : 2 } } }
{ "_id" : ObjectId("575d6fab0cde6714290f4450"), "train" : "b", "data" : { "1" : { "this" : 22, "that" : 32, "value" : 12, "month" : 2 }, "4" : { "this" : 25, "that" : 35, "value" : 15, "month" : 1 } } }
{ "_id" : ObjectId("575d6fab0cde6714290f4451"), "train" : "c", "data" : { "2" : { "this" : 22, "that" : 33, "value" : 13, "month" : 1 }, "5" : { "this" : 26, "that" : 36, "value" : 16, "month" : 2 } } }
我想搜索与文档中某些键/值匹配的所有文档/子文档/字段。
我应该如何搜索文档,以便搜索{'this': 22}
的结果文档如下所示。
{ "_id" : ObjectId("575d6fab0cde6714290f4450"), "train" : "b", "data" : { "1" : { "this" : 22, "that" : 32, "value" : 12, "month" : 2 }, "4" : { "this" : 25, "that" : 35, "value" : 15, "month" : 1 } } }
{ "_id" : ObjectId("575d6fab0cde6714290f4451"), "train" : "c", "data" : { "2" : { "this" : 22, "that" : 33, "value" : 13, "month" : 1 }, "5" : { "this" : 26, "that" : 36, "value" : 16, "month" : 2 } } }
同样,搜索{'this': 21}
将在下方返回。
{ "_id" : ObjectId("575d6fab0cde6714290f444f"), "train" : "a", "data" : { "0" : { "this" : 21, "that" : 31, "value" : 11, "month" : 1 }, "3" : { "this" : 21, "that" : 34, "value" : 14, "month" : 2 } } }
我理解db.store.find({'data.0.this':21})
也会产生与{'this': 21}
相同的结果,但这不是我在这里看到的,因为我不知道字段{{1}下的位置将字段data
作为字段文档。它可以是this
或data.0
或data.1
。
答案 0 :(得分:1)
您构建文档的方式,您无法做出您想要的那类查询。我假设嵌入的文档是在一个数组中。但你拥有的只是一个嵌入式文档。
如果您更改了文档结构以使数据键成为存根文档数组,那么您可以进行如下查询:
db.store.find({'data.this':21})