如何在MongoDB文件和所有子文档中搜索值匹配?

时间:2016-06-12 15:27:15

标签: mongodb subdocument

我有一个名为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作为字段文档。它可以是thisdata.0data.1

1 个答案:

答案 0 :(得分:1)

您构建文档的方式,您无法做出您想要的那类查询。我假设嵌入的文档是在一个数组中。但你拥有的只是一个嵌入式文档。

如果您更改了文档结构以使数据键成为存根文档数组,那么您可以进行如下查询:

 db.store.find({'data.this':21})