【问题标题】:How to find specific nested objects without knowing the parent key in mongodb如何在不知道 mongodb 中的父键的情况下查找特定的嵌套对象
【发布时间】:2019-10-14 06:53:45
【问题描述】:

我正在使用 javascript 和 mongoose 模块。 我有一个这样的对象

my_object = {
    ShopName: String,
    employees: [String],
    info: {
        NameEmployee_1: {
            age: String,
            work: String,
            city: String,
        },

        NameEmployee_2: {
            age: String,
            work: String,
            city: String,
        }
    } 

}

我想要 找到所有具有特定年龄但不知道员工姓名的员工,有没有办法做到这一点?

我知道你例如我可以这样做

db.collection.find({'info.Max': {$exists: true}})

查找所有至少有一名员工姓名为 Max 的商店 但是,如果我想要所有拥有至少一名 33 岁员工的商店,该怎么办

db.collection.find({'info.<name>.age': '33'}) ?

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    您可以使用$objectToArray(mongoDB 3.4.4 及更高版本)、$filter$project 并获得类似的东西:

    db.collection.aggregate([
      {
        $project: {
          obj: {
            $objectToArray: "$info"
          }
        }
      },
      {
        $project: {
          _id: 0,
          obj: {
            $filter: {
              input: "$obj",
              as: "item",
              cond: {
                $eq: [
                  "$$item.v.city",
                  "NY"
                ]
              }
            }
          }
        }
      },
      {
        $project: {
          info: {
            $arrayToObject: "$obj"
          }
        }
      },
    ])
    

    你可以看到working here

    想法是将对象分解为数组,对其进行过滤,然后将该数组转换回对象。

    我过滤了city,但我相信你明白了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多