我正在使用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
操作,然后再运行$currentDate
另一个update()
,我会得到所需的结果:
{
"_id" : 1,
"foo" : {
"bar" : {
"apples" : 4,
"bananas" : 5
},
"time" : Timestamp(1523459420, 1)
}
}
但是,如果我尝试同时执行它们,就像我在上面的代码中显示的那样,我就会收到错误。的为什么吗
答案 0 :(得分: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
。