我知道这可能是一个愚蠢的问题,但我在一本电子书上看到,在 MongoDB 插入中有一个 upsert选项。我找不到相关文件。有人能教教我吗?
upsert
由于 upsert被定义为“ 当没有文档符合查询条件时创建一个新文档”的操作,因此 upserts在 insert命令中没有位置。它是 update命令的一个选项。如果你执行如下命令,它作为一个 update,如果有一个文件匹配 ABC5,或者作为一个 ABC2与文件所描述的 update作为一个参数工作。
upserts
insert
update
db.collection.update(query, update, {upsert: true})
MongoDB 3.2添加了 replaceOne:
replaceOne
db.collection.replaceOne(query, replacement, {upsert: true})
它具有类似的行为,但它的 replacement不能包含更新操作符。
replacement
在 PKD 提供的链接中,db.collection.insert()没有提供上升的可能性。相反,mongo insert 将向集合中插入一个新文档。只能使用 db.collection.update()和 db.collection.save()进行上传。
db.collection.insert()
db.collection.update()
db.collection.save()
如果您碰巧将一个文档传递给已经在集合中的 db.collection.insert(),因此其中的 _id类似于现有的 _id,那么它将抛出一个重复的键异常。
_id
用于使用 java 驱动程序插入单个文档:
FindOneAndReplaceOptions replaceOptions = new FindOneAndReplaceOptions(); replaceOptions.upsert(true); collection.findOneAndReplace( Filters.eq("key", "value"), document, replaceOptions );
虽然唯一性应该从 Filters.eq("key", "value")确保,否则有可能添加多个文档。参见 这个了解更多
Filters.eq("key", "value")