mongodb的upsert操作
mongodb的update操作调用形式如下:
upsert是可选参数,如果设为true,当没有doc匹配查询条件时,会新建doc。默认值为false,在没有找到匹配时,不会插入文档。
upsert的具体行为
如果upsert为true,并且没有doc匹配查询条件,update()
会插入一个新doc。
新doc的创建基于以下内容:
-
如果
<update>
参数是一个替换doc(即只包含配对的字段和值),则新doc基于<update>
参数的内容创建。如果<query>
和<update>
参数都没有指定_id
字段,MongoDB会为新doc添加一个ObjectId类型的_id
字段。 -
如果
<update>
参数包含更新操作符
表达式,则新doc由<update>
和<query>
参数的内容共同决定。update()
操作会先基于<query>
参数中的等值语句创建一个基础doc,然后将<update>
参数中的更新操作应用上去。<query>
参数中的比较操作不会包含在新doc中。
如果upsert为true,并且根据查询条件找到了匹配文档,那么update()
就只执行更新操作。