MongoDB $ pull语法

安德斯·奥斯曼(AndersÖstman)

我在Mongodb中有一个$ pull(希望)有小的语法问题。

bulk.find({_id: new mongo.ObjectID(req.session._id)}).updateOne({$pull: {
  firstArray: {id: req.params.id},
  'secondArray.firstArrayIds': req.params.id
  'secondArray.$.firstArrayIds': req.params.id
}});

firstArray$pull可以正常工作。但是secondArray.firstArrayIds和/或secondArray。$。firstArrayIds没有。我在这里做错了什么?

这是我的数据结构:

clients: {
  firstArray: [
    {
      _id: '153'.
      someField1: 'someVal1',
    }
    ...
  ]

  secondArray: [
    {
      _id: '7423'.
      someField1: 'someVal1',
      firstArrayIds: [153, 154, 155, ...]
    }
    ...
  ]
}

编辑如果有多个嵌入式对象可以包含我要删除的ID secondArray怎么办firstArrayIds换句话说,当我删除对象时,firstdArray我想删除所有中 secondArray引用,而firstArrayIds不仅仅是第一个匹配项。

尼尔·伦恩

您的“ secondArray”具有嵌套的元素结构,因此$在更新中使用位置运算符时,必须标识要在查询中匹配的外部元素您基本上需要这样的东西:

bulk.find({ 
    "_id": new mongo.ObjectID(req.session._id), 
    "secondArray._id": "7423" 
}).update({
    "$pull": { 
        "firstArray": { "_id": "153" },
        "secondArray.$.firstArrayIds": 153
    }
});

因此,实际上,除了常规文档ID外,您还需要随请求传递“两个” ID值。即使是嵌套的,也可以,因为您只在“外部”级别匹配,并且仅在一个数组上匹配。如果您尝试匹配多个数组上的位置,那么位置运算符将无法实现这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章