[{
"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中的哪些查询来执行此操作?
答案 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 } }
]);
在我的情况下,没有[]标签无法正常工作。