Mongodb 涉及多个 collections 的复杂脚本

Mongodb complex script involving multiple collections

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

一些信息:

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

我有两个 collections - 'A' 和 'B'

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

示例:

Collection'A'中的文档: _id: 1, name: john, alias:[ {name: doe}, {name: holmes} ], status: dead

Collection中的文档'B':

_id: 1, alias: doe, address: london

基本上,我需要脚本遍历 collection 'A' 的 'alias.name' 字段中的所有值,并将它们引用到 'alias' 的值 collection 'B'。如果有匹配项,我想将 collection 'A' 中的 'status' 字段更新为 'active'。否则,它什么都不做。

这个脚本应该可以满足您的需求

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' }});
    }
  }
}