mongodb中的异构批量更新

Jas*_*ang 9 mongodb

我知道我们可以用mongodb批量更新文件

db.collection.update( criteria, objNew, upsert, multi )
Run Code Online (Sandbox Code Playgroud)

在一个db调用中,但它是同类的,即所有受影响的文档都遵循一种标准.但我想做的就是这样

db.collection.update([{criteria1, objNew1}, {criteria2, objNew2}, ...]
Run Code Online (Sandbox Code Playgroud)

,发送多个更新请求,可以在单个db调用中更新可能完全不同的文档或文档类.

我想在我的应用程序中做的是插入/更新一堆具有复合主键的对象,如果该键已经存在,则更新它; 否则插入它.

我可以在mongodb的一个组合中完成所有这些吗?

Rem*_*iet 6

这是两个单独的问题.到第一个; 没有MongoDB本机机制来批量发送条件/更新对,尽管技术上在循环中自己这样做必然与任何本机批量支持一样高效.

检查是否存在基于嵌入文档的文档(您称之为复合键,但为了避免混淆,为了避免混淆,最好在这种情况下使用mongo名称)并根据该存在插入/更新检查可以使用upsert完成:

文件A:

{
    _id: ObjectId(...),
    key: {
        name: "Will",
        age: 20
    }
}

db.users.update({name:"Will", age:20}, {$set:{age: 21}}), true, false)
Run Code Online (Sandbox Code Playgroud)

此upsert(如果没有文档符合条件,则使用insert进行更新)将根据文档A的存在执行以下两项操作之一:

  • 存在:在现有文档上执行更新"$ set:{age:21}"
  • 不存在:使用字段"name"和字段"age"创建一个新文档,其值分别为"Will"和"20"(基本上将条件复制到新文档中),然后应用更新($ set: {年龄:21}).最终结果是具有"name"="Will"和"age"= 21的文档.

希望有所帮助