嵌入式阵列mongodb上的$ pull / $ pop

时间:2013-09-22 14:59:53

标签: node.js mongodb

我有一个简单的集合,其中包含以下架构

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

我想我做得正确但仍然收到此错误。任何帮助表示赞赏。

1 个答案:

答案 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
    }
  }
}