2013-09-22 35 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 –