在mongo汇总调用中添加字典的值

时间:2019-07-19 15:59:05

标签: mongodb aggregate

背景

我有一个像这样的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" }

0 个答案:

没有答案