2015-07-20 45 views
1

在蒙戈外壳,我可以做到这一点:mongo和mongoose之间的不同行为?

db.getCollection('usercourses').update({ 
    _id:ObjectId("54bee7c6ababf28b4ea5a07f")}, 
    { 
    $unset:{ 
     'steps.0.topic':'' 
    } 
    }, 
{strict:false}) 

,它会从数组内的对象中删除“主题”字段中,找到该文件。

但是当我这样做的猫鼬:

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

因为你想取消设置字段名为field1(因为ES5没有computed property names):

$unset : { field1 : '' } 

相反,你需要这样做:

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