我知道这可能是一个愚蠢的问题,但我在一本电子书中读到upsert
MongoDB 插入中有一个选项。我找不到有关此的适当文档。有人可以教育我吗?
问问题
100405 次
3 回答
140
由于upsert
被定义为“当没有文档与查询条件匹配时创建一个新文档upserts
”的操作,所以ininsert
命令没有位置。它是update
命令的一个选项。如果您执行下面的命令,它可以作为update
,如果有文档匹配query
,或者作为参数insert
描述的带有文档update
。
db.collection.update(query, update, {upsert: true})
MongoDB 3.2 增加replaceOne
:
db.collection.replaceOne(query, replacement, {upsert: true})
它具有类似的行为,但它replacement
不能包含更新运算符。
于 2013-11-14T10:13:22.833 回答
7
与 PKDdb.collection.insert()
提供的链接一样,不提供 upsert 可能性。相反,mongo insert 将新文档插入到集合中。Upsert 只能使用db.collection.update()
and db.collection.save()
。
如果您碰巧传递了一个文档,db.collection.insert()
该文档已经在集合中,因此_id
与现有的类似_id
,它将引发重复键异常。
于 2013-11-14T10:16:05.423 回答
0
对于使用 java 驱动程序更新单个文档:
FindOneAndReplaceOptions replaceOptions = new FindOneAndReplaceOptions();
replaceOptions.upsert(true);
collection.findOneAndReplace(
Filters.eq("key", "value"),
document,
replaceOptions
);
尽管应该确保唯一性,Filters.eq("key", "value")
否则可能会添加多个文档。看到这个了解更多
于 2022-02-17T10:08:01.790 回答