mongoDB查询在嵌套数组中查找文档

时间:2016-09-05 21:53:29

标签: mongodb mongodb-query

[{
  "username":"user1",
  "products":[
           {"productID":1,"itemCode":"CODE1"},
           {"productID":2,"itemCode":"CODE1"},
           {"productID":3,"itemCode":"CODE2"},
       ]
},
{
  "username":"user2",
  "products":[
           {"productID":1,"itemCode":"CODE1"},
           {"productID":2,"itemCode":"CODE2"},
       ]
}]

我想为“user1”找到“products”的所有“productID”,以便产品的“itemCode”为“CODE1”。

应该编写mongoDB中的哪些查询来执行此操作?

3 个答案:

答案 0 :(得分:3)

如果您只需要匹配一个条件,那么点符号就足够了。 在Mongo shell中:

$unwind

这将返回具有itemCode“CODE1”的嵌套产品对象的所有用户。

<强>更新

一开始并不清楚你的要求,但应该是这样。

如果您希望将每个产品作为单独的条目,那么您将需要使用聚合框架。首先使用$match拆分数组中的条目,然后根据您的条件使用db.col.aggregate({$unwind: "$products"},{$match: { "username": "user1", "products.itemCode": "CODE1" } });

{ "_id" : ObjectId("57cdf9c0f7f7ecd0f7ef81b6"), "username" : "user1", "products" : { "productID" : 1, "itemCode" : "CODE1" } } { "_id" : ObjectId("57cdf9c0f7f7ecd0f7ef81b6"), "username" : "user1", "products" : { "productID" : 2, "itemCode" : "CODE1" } }

响应: Oncreate()

答案 1 :(得分:0)

您需要多个过滤器,如下所示,这只是AND条件(假设您的收藏名称为collection1

db.collection1.find({"username":"user1", "products.itemCode" : "CODE1"})

答案 2 :(得分:0)

您问题的答案是

db.col.aggregate([
   { $unwind: "$products" },
   { $match: { username: "user1", "products.itemCode": CODE1 } },
   { $project: { _id: 0, "products.productID": 1 } }
]);

在我的情况下,没有[]标签无法正常工作。