Mongodb сложный сценарий с участием нескольких коллекций - PullRequest
0 голосов
/ 26 февраля 2019

Я новичок в mongodb, и меня попросили выполнить задачу:

Некоторая информация:

Используемая версия mongodb - 3.4.9.Сценарий должен быть выполнен с использованием оболочки Монго.

У меня есть две коллекции - 'A' и 'B'

Я хочу обновить поле в коллекции 'A', если значение документа массива совпадает с полем 'B '.... Как я могу это сделать?

Пример:

Документ в коллекции' A ': _id: 1, name: john, alias:[ {name: doe}, {name: holmes} ], status: dead

Документ в коллекции' B ':

_id: 1, alias: doe, address: london

По сути, мне нужен скрипт, чтобы пройти через все значения в поле 'alias.name' коллекции 'A' и связать их со значением 'alias' вКоллекция "B".Если есть совпадение, я хочу обновить поле 'status' в коллекции 'A' до 'active'.В противном случае это ничего не должно делать.

1 Ответ

0 голосов
/ 26 февраля 2019

Этот скрипт должен делать то, что вам нужно

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

...