如果不存在,我需要插入一个文档.我知道"upsert"选项可以做到这一点,但我有一些特殊的需求.

首先,我只需要创建带有_id字段的文档,但前提是它还不存在.My _id字段是我生成的数字(不是ObjectId).如果我使用"upsert"选项,那么我会得到"Mod on _idnot allowed"

db.mycollection.update({ _id: id }, { _id: id }, { upsert: true });

我知道我们不能在$set中使用_id.

所以,我的问题是:在mongodb中,是否有任何方法可以原子化地"创建如果不存在的话"呢?

编辑:

var newUser = new User({ _id: id });
newUser.save(function (err) {               
    if (err && err.code === 11000) {            
            console.log('If duplicate key the user already exists', newTwitterUser);
        return;
    }
    console.log('New user or err', newTwitterUser);
});

但我仍然怀疑这是否是最好的方法.

推荐答案

只需使用insert().如果具有指定的_id的文档已经存在,则insert()将失败,不会修改任何内容——因此,当使用用户创建的_id的insert()时,"如果它不存在则创建"是默认情况下它已经在做的事情.

Mongodb相关问答推荐

如何在MongoDB中使用Aggregation来计算两个键相同但字段不同的对象数组的总值,并将其合并为一个?

Spring数据MongoDB(聚合)

MongoDB 在一个聚合中包含多个组

数组过滤器 MongoDB

在延迟函数中重用 context.WithTimeout

Mongodb 按数组元素聚合组

MongoDB:从开始日期和结束日期数组中匹配特定日期的聚合查询

如何将交易列表变成 token 数量的对象?

如何在mongodb中级联删除文档?

将 MongoDB 地理空间索引与 3d 数据结合使用

Springboot 使用 find*() 查询时出现 Mongodb 错误

Mongo DB中的Upserting和Id问题

$elemMatch 的 MongoDB 索引

将 JSON 与 MongoDB 一起使用?

使用 mongoimport 将日期(ISODate)导入 MongoDB

MongoDB聚合排序不起作用

单个模式数组中的多个模式引用 - mongoose

在 mongoDB 中展平嵌套的 JSON struct

如果我在 MongoDB 上使用 LINQ,为什么会失go 性能?

MongoError:Can't extract geo keys from object