首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB $pull语法

MongoDB $pull语法
EN

Stack Overflow用户
提问于 2014-10-02 16:52:10
回答 1查看 898关注 0票数 1

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

代码语言:javascript
复制
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没有。我在这里做错什么了?

这是我的数据结构:

代码语言:javascript
复制
clients: {
  firstArray: [
    {
      _id: '153'.
      someField1: 'someVal1',
    }
    ...
  ]

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

编辑,如果secondArray中有多个嵌入对象,firstArrayIds可以包含要删除的id,怎么办?换句话说,在删除firstdArray中的对象时,我希望删除all secondArray's firstArrayIds中的引用,而不仅仅是第一次匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 04:52:31

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

代码语言:javascript
复制
bulk.find({ 
    "_id": new mongo.ObjectID(req.session._id), 
    "secondArray._id": "7423" 
}).update({
    "$pull": { 
        "firstArray": { "_id": "153" },
        "secondArray.$.firstArrayIds": 153
    }
});

因此,除了一般文档id之外,实际上还有“两个”id值需要与请求一起传递。尽管这是嵌套的,但这是可以的,因为您只在“外部”级别上进行匹配,并且只在一个数组上匹配。如果您试图匹配多个数组上的位置,那么使用位置运算符是不可能的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26165650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档