在mongo shell中,我可以这样做:
db.getCollection('usercourses').update({
_id:ObjectId("54bee7c6ababf28b4ea5a07f")},
{
$unset:{
'steps.0.topic':''
}
},
{strict:false})
并且它将从找到的文档中删除数组内部对象中的“ topic”字段。
但是当我用猫鼬做这件事时:
function() {
return UserCourses.findQ()
.then(function(uCourse){
return Q.all(uCourse.map(worker))
}).catch(function(error) {
console.log(error);
});
}
function worker(uCourse) {
return Q.all(uCourse.steps.map(
function(step,i){
var field1 = 'steps.'+i+'.topic';
return UserCourses.updateQ({_id:uCourse._id},
{
$unset:{field1:''},
},
{strict:false});
}
))
}
什么都没发生。
为什么?
最佳答案
因为您尝试取消设置名为field1
的字段(因为ES5没有computed property names):
$unset : { field1 : '' }
相反,您需要这样做:
var obj = {};
obj['steps.'+i+'.topic'] = '';
...
$unset : obj
关于node.js - mongodb和mongoose之间的行为不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31524788/