2013-09-22 2 views
0

У меня есть простой набор со следующей схемой

{ 
name:"John", 
brands:[ 
{ 
    name:"some", 
    email:"[email protected]" 
}, 
{ 
    name:"blah" 
    email:"[email protected]" 
} 
] 
} 

Я использую следующий запрос, чтобы удалить внедренный объект в поле моего бренды массива:

var args = { 
'query':{name:"John",brands.email:"[email protected]"} 
,update:{ 
'$pull':{ 
'brands.$.email:"[email protected]" 
} 
} 
} 

я использую nodejs драйвер для MongoDB и когда я запускаю выше, используя следующие:

collectionName.findAndModify(args,function(req,res){ 

}) 

я го е следующая ошибка:

MongoError: Невозможно применить $ тянущий/$ pullAll модификатор не-массив

Я предполагаю, что я делаю правильно, но все еще получаю эту ошибку. Любая помощь оценивается.

ответ

3

Ваш $pull предназначенный для email который не является массивом. Если вы пытаетесь удалить соответствующий элемент, вы можете сделать это следующим образом:

var args = { 
    query: {name: "John"}, 
    update: { 
    '$pull': { 
     brands: {email: "[email protected]"} 
    } 
    } 
} 

или если вы пытаетесь удалить email поле, используйте $unset вместо:

var args = { 
    query: {name: "John", "brands.email": "[email protected]"}, 
    update: { 
    '$unset': { 
     'brands.$.email': 1 
    } 
    } 
} 
+0

хорошо хорошо:) спасибо +1 –

Смежные вопросы