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