我是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”中的“状态”字段更新为“活动”。否则,它什么都不做。
答案 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' }});
}
}
}