mongo和猫鼬之间的不同行为?

时间:2015-07-20 19:28:33

标签: node.js mongodb mongoose

在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});
    }
))
}

什么都没发生。

为什么?

1 个答案:

答案 0 :(得分:1)

因为您试图取消设置名为field1的字段(因为ES5没有computed property names):

$unset : { field1 : '' }

相反,你需要这样做:

var obj = {};
obj['steps.'+i+'.topic'] = '';
...
$unset : obj