涉及多个集合的Mongodb复杂脚本

时间:2019-02-26 01:52:36

标签: javascript database mongodb for-loop nosql-aggregation

我是mongodb的新手,被要求完成任务:

一些信息:

正在使用的mongodb版本是3.4.9。该脚本需要使用mongo shell来完成。

我有两个集合-'A'和'B'

如果数组文档的值与'B'字段匹配,我想更新'A'集合中的字段。...我该怎么做?

示例:

集合“ A”中的文档: _id: 1, name: john, alias:[ {name: doe}, {name: holmes} ], status: dead

集合'B'中的文档:

_id: 1, alias: doe, address: london

基本上,我需要脚本遍历集合“ A”的“ alias.name”字段中的所有值,并将它们引用为集合“ B”中的“ alias”的值。如果存在匹配项,我想将集合“ A”中的“状态”字段更新为“活动”。否则,它什么都不做。

1 个答案:

答案 0 :(得分:0)

此脚本应满足您的需求

var docs = db.A.find({}, { alias: 1, status: 1 });

while (docs.hasNext()) {
  var currentDoc = docs.next();
  if (currentDoc.alias && currentDoc.alias.length) {
    var aliasList = currentDoc.alias.map(function(alias){
        return alias.name;
    })
    var existInB = db.B.findOne({ alias: { $in: aliasList } });
    if (existInB && existInB._id) {
      db.A.updateOne({ _id: currentDoc._id }, { $set: { status: 'active' }});
    }
  }
}