我在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
现在有可能吗?
答案 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