如果对象键存在,Mongoose 检索文档

Mongoose retrieve documents if object keys exist

我有一个名为 Users 的 mongoose 模式:

let UserSchema = new mongoose.Schema({
firstname: {
  type: String,
  required: true,
},
lastname: {
  type: String,
  required: true,
},
houses: {
  type: Map,
  of: Array,
  required:[true,"No Units Detected"]
},
gender: {
  type: String,
  required: true,
},
email: {
  type: String,
  required: true,
  unique: true,
  lowercase: true,
  validate: (value) => {
    return validator.isEmail(value);
  },

},

这导致文档被保存为: 文档 1:

    {
       firstname:"user1",
       lastname:"user",
       gender:"male",
       email:"user@users.com",
       houses: {
          "New York" : ['house1','house2']
          "Florida"  :  ['house1','house2']
      }
     }

文档 2:

    {
       firstname:"user2",
       lastname:"user",
       gender:"female",
       email:"user2@users.com",
       houses: {
          "Florida"  :  ['house1']
          "Texas"    : ['house1']
      }
     }

这些模式的目的是列出每个用户的房屋,即使用户在多个州拥有多个房屋。 我的问题是:是否有任何查询可以用来列出处于特定状态的用户(这是对象内的键) 例如 : 查询德克萨斯州 return 仅限用户 2,查询佛罗里达州 return 用户 1 和用户 1

方法一:使用$exist

db.collection.aggregate([
  {
    $match: {
      "houses.Texas": { $exists: true }
    }
  }
])

mongoplayground


方法二:使用$objectToArray

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $ne: [
          {
            $filter: {
              input: { $objectToArray: "$houses" },
              as: "h",
              cond: { $eq: [ "$$h.k", "Texas" ] }
            }
          },
          []
        ]
      }
    }
  }
])

mongoplayground