mongodb和mongoose之间的行为不同

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


什么都没发生。

为什么?

最佳答案

因为您尝试取消设置名为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/

10-16 19:52