Mongodb:聚合合并集合

时间:2018-02-04 08:55:04

标签: mongodb aggregation-framework

我在Robo 3T上为mongodb编写了这个脚本:

db.Events.aggregate([
    {$match : {BusinessCode: /(([1-2]?[0-9])-([0-9]*)-([0-9]*)-([0-9]*)-([0-9]*)-([0-9]*)-([0-9]*))/}},
    {$project : {BusinessCode : {$arrayElemAt:[{$split : ["$BusinessCode", "-"]},0]}}},
    {$addFields: {"Domain":  "$BusinessCode"}},
    //{ $out : "Events" } 
],{
allowDiskUse: true
})

现在我想要而不是 addFields ,我使用更新!我怎么能这样做?

正如您所看到的,我使用 out ,但我不想创建新的集合或替换我的集合,我希望将aggregate return更新到我的集合中。

在我的方案中(如果存在),填充新值。

我看过4年前的帖子,如this

现在有可能吗?

1 个答案:

答案 0 :(得分:0)

最后我找到了答案:

这不是我的答案。 (chridam回答)

var pipeline = [
    {
        "$match": { "date_order": { "$gt": v_date1year } }
    },
    {
        "$group": {
            "_id": "$id_client", 
            "count": { "$sum" : 1 }
        }
    },
    { "$out": "tmp_indicators" }        
];
db.orders.aggregate(pipeline);

var bulkOps = db.tmp_indicators.find().map(function (doc) { 
    return { 
        "updateOne": { 
            "filter": { "_id": doc._id } ,              
            "update": { "$set": { "nb_orders_1year": doc.count } } 
        }         
    };
});

db.clients.bulkWrite(bulkOps, { "ordered": true });

完整答案是here