我正在使用Mongo 3.6.3,并且我有一个数据库,其中包含一个集合和一个_id等于1

我想通过该对象内部添加一个对象和一个时间戳来更新项目。 但是,我得到一个错误。 这是我的工作:

function MyObject() {
    this.bar = {
        apples: 4,
        bananas: 5
    };
}

collection.update({
    _id: 1
}, {
    $set: {
        "foo": new MyObject()
    },
    $currentDate: {
        "foo.time": {
            $type: 'timestamp'
        }
    }
}, function (err) {
    console.log(err.name, err.message);
});

我得到:

MongoError更新路径“ foo.time”会在“ foo”处产生冲突

为什么会这样呢?

如果我先运行$set操作,然后在另一个update()运行$currentDateupdate()得到所需的结果:

{
    "_id" : 1,
    "foo" : {
        "bar" : {
            "apples" : 4,
            "bananas" : 5
        },
        "time" : Timestamp(1523459420, 1)
    }
}

但是,如果我尝试像上面的代码中所示的那样同时进行操作,则会收到错误消息。 为什么?

#1楼 票数:2

您不能有多个运算符( $set$currentDate )来修改同一路径(本例中为foo )。 在您的情况下,您可以使用点符号:

collection.update({
    _id: 1
}, {
    $set: {
        "foo.bar.apples": 4,
        "foo.bar.bananas": 5
    },
    $currentDate: {
        "foo.time": {
            $type: 'timestamp'
        }
    }
}, function (err) {
    console.log(err.name, err.message);
});

或者只是更改MyObject设置this.time = new Date()而不是使用$currentDate

  ask by Hristiyan Dodov translate from so

未解决问题?本站智能推荐:

1回复

为什么MongoDB $ set不更新文档?

cursor[i].name有一个字符串值,当我用console.log()时它显示很好。 该文档未更新。 我在MongoHQ中使用远程数据库,并使用本机mongodb驱动程序运行Node.js服务器。 如果我在连接到同一数据库的同时在Shell上运行查询,则可以正常运行。 编
1回复

使用带有索引变量的$ set来更新文档[重复]

这个问题在这里已有答案: 在mongodb update 1中 使用变量 对于匹配条件_id等于100的文档,以下操作更新tags字段中的值第二个元素(数组索引为1)和rating数组的第一个元素(数组索引为0)中的rating字段。 以上是来自mon
1回复

使用FindByIdAndUpdate更新文档

我在Mongoose上findByIdAndUpdate问题,其中findByIdAndUpdate在回调中未返回正确的模型。 我想从用户文档更新TIMELINE.Description属性:
1回复

使用mongoDB和node.js更新文档时出错

使用MongoDB和Node.js更新文档时出现以下错误。 错误: 我正在使用mongojs驱动程序连接mongoDB。我在下面解释我的代码。 我正在跟踪此链接以更新记录。请帮助我解决此错误。
1回复

使用新的ObjectID和$ currentDate更新数组

我的用户在mongo数据库中有一个数组。 在注册时,我要向该用户数组添加一个新用户(对象)。 同时,我想为这个新用户创建一个ObjectID并使用创建日期创建一个created_at属性 我为另一个文件的更新方法创建了通用函数 }; NewUserStructure是我
2回复

在推入数组时更新文档

我有以下架构: 注意这是strict: false 。 我想能够upsert新的文件。 关键是,我不想覆盖data数组,而是希望将新文档放入其中。 例如,假设这是一个现有文档: 我希望对此进行upsert : 预期结果将是: 为了明确说明:该文档已经存在
1回复

Mongoose更新文档使用findByIdAndUpdate失败

尝试使用findByIdAndUpdate更新MongoDB文档: 返回错误: Object lm has no method 'findByIdAndUpdate' 我尝试使用landmarkModel.findByIdAndUpdate交换lm.findByIdAndUpdat
1回复

如何使用$ setOnInsert获取更新文档的数量?

我在猫鼬中使用以下更新查询: 我需要获取插入文档的数量。 我该怎么办?