背景
我有一个像这样的javascript字典:
var Jidcs = {}
var mycursor = db.tags.find({"tagkey":"color"})
while (!mycursor.isExhausted()) {
colors = mycursor.next()
Jidcs[colors._id]= colors.tagvalue
}
我有一个mongo集合,其中包含一个属性与Jidcs
中的键相匹配的项目。因此,这些项目都具有字典中值的“外键”。
因此,每个项目都有一个与字典中的颜色值匹配的不同ID。我想按这些值分组。我的最终目标是列出每种颜色的商品的总商品成本计数。粉色10美元,红色20美元,等等。
问题
如何在聚合调用中将字典中的值“附加”到对象?
注释
这可以满足我的需求,但是速度却非常慢:
db.items.aggregate([
{$match: {"tagidlist": {$in:Jids}}},
{$unwind: "$tagidlist"},
{$lookup: {"from": "tags", "localField": "tagidlist", "foreignField": "_id", as: "TagDetails" }},
{$unwind: "$TagDetails"},
{$group: { _id: "$TagDetails.tagvalue", cost: { $sum : "$cost"}}}
]);
编辑1:
tagidlist
是一个ID数组。其中的10个。这些ID对应于标签集合
项目收集对象示例:
{ "_id" : ObjectId("5d2f8762f50da20c900dbd1d"), "period" : 201812, "cost" : 3, "tagidlist" : [ 126517, 7293, 148653, 79309, 16261, 147891, 83787, 154593, 97223, 88283 ] }
标签收集对象示例
{ "_id" : 200000, "tagkey" : "color", "tagvalue" : "orange" }