代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

如何从MongoDB集合的文档数组中删除不匹配的值?

  •  0
  • Ahamed Moosa  · 技术社区  · 6 年前

    我有一个在我的mongoDB收藏之一下面的文件。

    {"key":"CarName","value":{"default":"Unknown","MyCar":"TNK1234","YourCar":"TNW2342"}}
    

    “我的车” 中的项目 子文档。

    db.mycollection.update({{"key":"CarName"},{value.MyCar:0}},{$pull:{value.MyCar:0}});
    

    但整个文档都被删除了。不确定语法。

    我希望文件看起来像

    我试过了

    db.mycollection.update({"key":"CarName"},{$unset:{"value.default:"","value.YourCar":""}});
    

    哪个有效

    但是,如果我有多个字段要取消设置,我将不得不提到所有的字段,我想删除,所以我正在寻找替代品。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Joe    6 年前

    如果您使用的是mongodb4.2,那么可以指定一个管道来处理更新。实现这一目标的一种方法是:

    • 将对象转换为键值对数组
    • 过滤数组,只保留所需的密钥
    • 将数组转换回对象
    • 将值存储回原始字段
    db.mycollection.update({"key":"CarName"},
                           [{$set: {
                              value: {
                                $arrayToObject: {
                                  $filter: {
                                            input: {$objectToArray: "$value"},
                                            cond: {$eq: ["$$this.k","MyCar"]}
                                  }
                                }
                              }
                           }}]
    )
    

    Mongo playground不支持更新,但这演示了pipeline阶段的功能: Playground