Mongo 查询具有 ObjectId 的对象数组

Mongo Query Array of Objects with ObjectIds

我有以下用户模型:

const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: [true, 'Please tell us your name!'],
    },
    email: {
        type: String,
        required: [true, 'Please provide your email'],
        //unique: true,
        lowercase: true,
        validate: [validator.isEmail, 'Please provide a valid email'],
    },
    phoneNumber: { type: String, default: '' },
    photo: {
        type: String,
        default: 'default.jpg',
    },
    // roles: [{ type: mongoose.Schema.ObjectId, ref: 'Roles' }],
    roles: [String],
    password: {
        type: String,
        required: [true, 'Please provide a password'],
        minlength: 8,
        select: false,
    },
    passwordConfirm: {
        type: String,
        required: [true, 'Please confirm your password'],
        validate: {
            // This only works on CREATE and SAVE!!!
            validator: function (el) {
                return el === this.password
            },
            message: 'Passwords are not the same!',
        },
    },
    passwordChangedAt: { type: Date, select: false },
    passwordResetToken: { type: String, select: false },
    passwordResetExpires: { type: Date, select: false },
    active: {
        type: Boolean,
        default: true,
        // select: false,
    },

    admissionDate: Date,

    positions: [
        {
            branch: {
                //branch al qeu pertenece el horario
                type: mongoose.Schema.ObjectId,
                ref: 'Branch',
            },
            area: {
                //area al que pertenece el horario
                type: mongoose.Schema.ObjectId,
                ref: 'Area',
            },
            position: {
                //area al que pertenece el horario
                type: mongoose.Schema.ObjectId,
                ref: 'Position',
            },
            salary: { type: Number, default: '' },
        },
    ],
    
    
})

我有属性 positions,这是一个对象数组。每个对象都有此用户所属的 branchareaposition 的引用(这些是单独的模型)。

我正在尝试创建一个可以显示属于某个分支和区域的用户的查询,但到目前为止我还无法创建该查询:

我试过:

{
  "positions": {
    "branch": "60691ada4a9943d8eb562874", 
    "area": "60691aea4a9943d8eb562875"
   }
}

尝试使用 $in 运算符、$all 运算符、$elemMatch 运算符,但到目前为止没有任何效果。

能否帮我构建正确的查询以获取所需的元素。

非常感谢您。

编辑: 使用 $elemMatch 测试过滤器:

它应该找到这个元素:

您可以使用 $elemMatch 来匹配相同元素中的两个字段

db.collection.find({
  positions: {
    $elemMatch: {
      branch: "60691ada4a9943d8eb562874",
      area: "60691aea4a9943d8eb562875"
    }
  }
})

Playground