mongo和mongoose不同的行为?
在mongo shell中,我可以这样做:
db.getCollection('usercourses').update({ _id:ObjectId("54bee7c6ababf28b4ea5a07f")}, { $unset:{ 'steps.0.topic':'' } }, {strict:false})
它会从find的文档中删除数组内的对象的“主题”字段。
但是当我用mongoose做这个时:
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没有计算属性名称 ):
$unset : { field1 : '' }
相反,你需要这样做:
var obj = {}; obj['steps.'+i+'.topic'] = ''; ... $unset : obj