【发布时间】:2015-07-26 07:54:21
【问题描述】:
我最近提出了这个问题,它帮助我获取了一个数组,用于在聚合 mongoDB 查询中获取结果 (MongoDB Aggregate Array with Two Fields)
我现在的问题是获得组合两个不同的键。
我有一个包含一般产品的产品集合:
{
"_id" : ObjectId("554b9f223d77c810e8915539"),
"brand" : "Airtex",
"product" : "E7113M",
"type" : "Fuel Pump",
"warehouse_sku" : [
"1_5551536f3d77c870fc388a04",
"2_55515e163d77c870fc38b00a"
]
}
我有以下子产品(上面有多个通用产品)
{
"_id" : ObjectId("55524d0c3d77c8ba9cb2d9fd"),
"brand" : "Performance",
"product" : "P41K",
"type" : "Fuel Pump Component",
"general_products" : [
ObjectId("554b9f123d77c810e891552f"),
ObjectId("554b9f143d77c810e8915530"),
ObjectId("554b9f173d77c810e8915533"),
ObjectId("554b99b83d77c810e8915436"),
ObjectId("554b9f2e3d77c810e8915549")
],
"warehouse_sku" : [
"1_555411043d77c8066b3b6720",
"1_555411073d77c8066b3b6728"
]
}
我的问题是我想要带有 _id 的一般产品和与特定的warehouse_sku 模式匹配的内部子产品。想要的结果是这样的:
{ "_id" : ObjectId("554b9f2e3d77c810e8915549") }
{ "_id" : ObjectId("554b99b83d77c810e8915436") }
{ "_id" : ObjectId("554b9f173d77c810e8915533") }
{ "_id" : ObjectId("554b9f143d77c810e8915530") }
{ "_id" : ObjectId("554b9f123d77c810e891552f") }
{ "_id" : ObjectId("554b9f223d77c810e8915539") }
我进行了多个查询,例如:
1)
db.products.aggregate([
... {$match:{warehouse_sku: /^1/ }},
... {$unwind:"$general_products"},
... {$group:{_id: "$general_products"}}
... ])
但是一般产品的_id不在上面:
{ "_id" : ObjectId("554b9f2e3d77c810e8915549") }
{ "_id" : ObjectId("554b99b83d77c810e8915436") }
{ "_id" : ObjectId("554b9f173d77c810e8915533") }
{ "_id" : ObjectId("554b9f143d77c810e8915530") }
{ "_id" : ObjectId("554b9f123d77c810e891552f") }
2)
db.products.aggregate([
... {$match:{warehouse_sku: /^1/ }},
... {$group:{_id: "$_id"}}
... ])
但给我通用和子产品的 _id [不想要],而不是子产品内通用产品的 _id:
{ "_id" : ObjectId("55524d0c3d77c8ba9cb2d9fd") }
{ "_id" : ObjectId("554b9f223d77c810e8915539") }
【问题讨论】:
标签: arrays mongodb mongodb-query