参考 > 参考 > mongo Shell方法 > 批量操作方法 > Bulk.find.upsert()
小费
从3.2版开始,MongoDB还提供了db.collection.bulkWrite()
执行批量写入操作的
方法。
Bulk.find.
upsert
()¶将更新或替换操作的upsert选项设置为true,并具有以下语法:
将upsert
选项设置为true
,如果条件不存在匹配的文档Bulk.find()
,则更新或替换操作将执行插入。如果存在匹配的文档,则更新或替换操作将执行指定的更新或替换。
使用Bulk.find.upsert()
具有以下写操作:
下面描述了与结合使用时各种写入操作的插入行为Bulk.find.upsert()
。
Bulk.find.replaceOne()
¶该Bulk.find.replaceOne()
方法接受仅包含字段和值对的替换文档作为其参数:
如果使用该Bulk.find.upsert()
选项进行替换操作执行插入操作,则插入的文档就是替换文档。如果替换文档和查询文档均未指定_id
字段,则MongoDB将添加该_id
字段:
Bulk.find.updateOne()
¶该Bulk.find.updateOne()
方法接受以下参数作为其
参数:
Bulk.find.replaceOne()
)的替换文档,如果参数是仅包含字段和值对的替换文档:
然后,如果使用该Bulk.find.upsert()
选项进行更新操作执行插入操作,则插入的文档就是替换文档。如果替换文档和查询文档均未指定_id
字段,则MongoDB将添加该_id
字段:
然后,如果带有Bulk.find.upsert()
选项的更新操作执行插入操作,则更新操作将插入带有Bulk.find()
方法查询文档中具有字段和值的文档,
然后应用更新文档中的指定更新。如果更新文档和查询文档均未指定_id
字段,则MongoDB将添加该_id
字段:
从4.2版开始,更新方法可以接受聚合管道。例如,以下用途:
$replaceRoot
阶段可以提供与$setOnInsert
更新运算符表达式类似的行为,$set
可以提供与$set
更新运算符表达式相似的行为的阶段,NOW
,它解析为当前日期时间,并且可以提供与$currentDate
更新运算符表达式类似的行为
。然后,如果带有该Bulk.find.upsert()
选项的更新操作执行插入操作,则更新操作将插入具有该Bulk.find()
方法的查询文档中的字段和值的文档,然后应用指定的聚合管道。如果更新文档和查询文档均未指定_id
字段,则MongoDB将添加该_id
字段:
Bulk.find.update()
¶当使用upsert()
与多文档更新方法Bulk.find.update()
,如果没有文件匹配查询条件,更新操作插入一个单一的文件。
该Bulk.find.update()
方法接受以下参数作为其参数:
然后,如果带有Bulk.find.upsert()
选项的更新操作执行插入操作,则更新操作将插入具有Bulk.find()
方法查询文档中字段和值的单个文档,然后从更新文档中应用指定的更新。如果更新文档和查询文档均未指定_id
字段,则MongoDB将添加该_id
字段:
从4.2版开始,更新方法可以接受聚合管道。例如,以下用途:
$replaceRoot
阶段可以提供与$setOnInsert
更新运算符表达式类似的行为,$set
可以提供与$set
更新运算符表达式相似的行为的阶段,NOW
,它解析为当前日期时间,并且可以提供与$currentDate
更新运算符表达式类似的行为
。在NOW
整个管道中,的值
保持不变。要访问聚合变量,请在变量前加双美元符号
$$
并用引号引起来。然后,如果带有Bulk.find.upsert()
选项的更新操作执行插入操作,则更新操作将插入单个文档以及该Bulk.find()
方法的查询文档中的字段和值
,然后应用聚合管道。如果更新文档和查询文档均未指定
_id
字段,则MongoDB将添加该_id
字段: