0

我有一个具有以下架构的简单集合

{
 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 修饰符应用于非数组

我想我做得对,但仍然出现此错误。任何帮助表示赞赏。

4

1 回答 1

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
    }
  }
}
于 2013-09-22T15:15:38.103 回答