【问题标题】:Meteor/MongoDB: Pulling an element from two sub-arrays with a single command?Meteor/MongoDB:用一个命令从两个子数组中提取一个元素?
【发布时间】:2015-10-23 08:23:42
【问题描述】:

我有一个具有以下结构的元素:

{
 modules: [
    {
     type: "group1",
     readers:["user1", "user2", "user3", "user4"],
     writers:["user1", "user2", "user6", "user7"]
    },
    {
     type: "group2",
     readers:["user1", "user2", "user3", "user4"],
     writers:["user1", "user2", "user6", "user7"]
    }
   ]
 }

我在 modules 数组中有不同(但有上限)的对象,我想从调用次数最少的所有读取器和写入器组中删除 "user1"。我试过这个:

  Collection.update({"modules.writers": user_id}, {$pull: {"modules.$.writers":user_id}});
  Collection.update({"modules.readers": user_id}, {$pull: {"modules.$.readers":user_id}});

它只会从其中一个模块中删除用户。我需要对模块数组中的每个对象使用新的调用,还是有办法一次性完成所有这些?

【问题讨论】:

    标签: arrays mongodb meteor


    【解决方案1】:

    您可以简单地向您的 $pull 对象添加第二个键值对。

    Collection.update(
      {$or: [
        "modules.writers": user_id,
        "modules.writers": user_id
      },
      {$pull: {
        "modules.$.writers": user_id,
        "modules.$.readers": user_id
      }}
    );
    

    如果你要拉取的指定元素没有定义,它会被忽略。

    Read more in the mongo docs

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      相关资源
      最近更新 更多