在 mongodb 插入命令中是否有“ upsert”选项?

我知道这可能是一个愚蠢的问题,但我在一本电子书上看到,在 MongoDB 插入中有一个 upsert选项。我找不到相关文件。有人能教教我吗?

107798 次浏览

由于 upsert被定义为“ 当没有文档符合查询条件时创建一个新文档”的操作,因此 upsertsinsert命令中没有位置。它是 update命令的一个选项。如果你执行如下命令,它作为一个 update如果有一个文件匹配 ABC5,或者作为一个 ABC2与文件所描述的 update作为一个参数工作。

db.collection.update(query, update, {upsert: true})

MongoDB 3.2添加了 replaceOne:

db.collection.replaceOne(query, replacement, {upsert: true})

它具有类似的行为,但它的 replacement不能包含更新操作符。

在 PKD 提供的链接中,db.collection.insert()没有提供上升的可能性。相反,mongo insert 将向集合中插入一个新文档。只能使用 db.collection.update()db.collection.save()进行上传。

如果您碰巧将一个文档传递给已经在集合中的 db.collection.insert(),因此其中的 _id类似于现有的 _id,那么它将抛出一个重复的键异常。

用于使用 java 驱动程序插入单个文档:

FindOneAndReplaceOptions replaceOptions = new FindOneAndReplaceOptions();
replaceOptions.upsert(true);
collection.findOneAndReplace(
Filters.eq("key", "value"),
document,
replaceOptions
);

虽然唯一性应该从 Filters.eq("key", "value")确保,否则有可能添加多个文档。参见 这个了解更多