Mongodb:使用不同的过滤器值更新多个文档

Gou*_*waj 0 mongodb mongodb-query

我的数据库中有一个学生集合,如下所示。

Mongodb 学生收藏:

{
    name : 'Rahul',
    age : '15'
}
{
    name : 'Ajay',
    age : '25'
}
{
    name : 'Pinku',
    age : '43'
}
{
    name : 'Vinod',
    age : '30'
}
Run Code Online (Sandbox Code Playgroud)

在为上述学生调用外部系统后,我得到了一组数据。

[
    {'name':'Ajay','marks':20},
    {'name':'Pinku','marks':12},
    {'name':'Vinod','marks':50},
    {'name':'Rahul','marks':80}
]
Run Code Online (Sandbox Code Playgroud)

我的任务是更新学生集合记录,并添加匹配学生的分数。有没有一种方法可以在一次 dml 操作中完成此操作,而不是循环遍历每个学生文档并用标记更新它。

输出应该是: Mongod Student Collection :

{
    name : 'Rahul',
    age : '15',
    marks : 80
}
{
    name : 'Ajay',
    age : '25',
    marks : 20
}
{
    name : 'Pinku',
    age : '43',
    marks : 12
}
{
    name : 'Vinod',
    age : '30',
    marks : 50
}
Run Code Online (Sandbox Code Playgroud)

注意:我想在 MondbDB Realm UI 中执行此操作,以自动化某些功能。

Joe*_*Joe 5

在这种情况下, bulkWrite会很有用。映射输入数组以生成 updateOne 操作数组,然后批量提交它们。

let input = [
    {'name':'Ajay','marks':20},
    {'name':'Pinku','marks':12},
    {'name':'Vinod','marks':50},
    {'name':'Rahul','marks':80}
];
let operations = input.map(function(student){
   return {updateOne:{filter:{name:student.name},update:{$set:{marks:student.marks}}
};
db.collection.bulkWrite(operations);
Run Code Online (Sandbox Code Playgroud)