javascript - 如何在不知道mongodb中的父键的情况下查找特定的嵌套对象

标签 javascript mongodb mongoose

我正在使用 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'})

最佳答案

您可以使用$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

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

我过滤了城市,但我相信您明白了。

关于javascript - 如何在不知道mongodb中的父键的情况下查找特定的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347376/

相关文章:

mongodb - MongoDB 值可以是 Hashmap 吗?该 HashMap 可以在 Mongoose 模式中建模吗?

mongodb - 未授权在 mongo 4.2 中对 testdb.system.indexes src/mongo/db/commands/find_cmd.cpp 170 进行查询

node.js - Mongoose:创建 'virtual column' 的值

javascript + Coffeescript,带有分组运算符?

javascript - 合并同一索引处的 2 个多维数组

javascript - 单击按钮刷新 Meteor 页面

javascript - 删除文档后如何正确删除多余的引用对象 ID

javascript - 如何更改图像的位置?

javascript - jQuery 函数作为其他 jQuery 函数的参数不起作用

node.js - 通过聚合对嵌套列进行排序