2015-07-20 5 views
1

В Монго оболочки я могу это сделать:Различное поведение между манго и мангуста?

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 
Смежные вопросы