我有一个简单的集合,其中包含以下架构
{
name:"John",
brands:[
{
name:"some",
email:"asdf@some.com"
},
{
name:"blah"
email:"blah@blah.com"
}
]
}
我正在使用以下查询删除我的品牌数组字段中的嵌入对象:
var args = {
'query':{name:"John",brands.email:"asdf@some.com"}
,update:{
'$pull':{
'brands.$.email:"asdf@some.com"
}
}
}
我正在为mongodb使用nodejs驱动程序,当我使用以下命令运行上述内容时:
collectionName.findAndModify(args,function(req,res){
})
我收到以下错误:
MongoError:无法将$ pull / $ pullAll修饰符应用于非数组
我想我做得正确但仍然收到此错误。任何帮助表示赞赏。
答案 0 :(得分:3)
您的$pull
定位的email
不是数组。如果您尝试删除匹配元素,可以这样做:
var args = {
query: {name: "John"},
update: {
'$pull': {
brands: {email: "asdf@some.com"}
}
}
}
或者如果您尝试删除email
字段,请改为使用$unset
:
var args = {
query: {name: "John", "brands.email": "asdf@some.com"},
update: {
'$unset': {
'brands.$.email': 1
}
}
}