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
,这是一个对象数组。每个对象都有此用户所属的 branch
、area
和 position
的引用(这些是单独的模型)。
我正在尝试创建一个可以显示属于某个分支和区域的用户的查询,但到目前为止我还无法创建该查询:
我试过:
{
"positions": {
"branch": "60691ada4a9943d8eb562874",
"area": "60691aea4a9943d8eb562875"
}
}
尝试使用 $in
运算符、$all
运算符、$elemMatch
运算符,但到目前为止没有任何效果。
能否帮我构建正确的查询以获取所需的元素。
非常感谢您。
编辑:
使用 $elemMatch
测试过滤器:
它应该找到这个元素:
您可以使用 $elemMatch
来匹配相同元素中的两个字段
db.collection.find({
positions: {
$elemMatch: {
branch: "60691ada4a9943d8eb562874",
area: "60691aea4a9943d8eb562875"
}
}
})
我有以下用户模型:
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
,这是一个对象数组。每个对象都有此用户所属的 branch
、area
和 position
的引用(这些是单独的模型)。
我正在尝试创建一个可以显示属于某个分支和区域的用户的查询,但到目前为止我还无法创建该查询:
我试过:
{
"positions": {
"branch": "60691ada4a9943d8eb562874",
"area": "60691aea4a9943d8eb562875"
}
}
尝试使用 $in
运算符、$all
运算符、$elemMatch
运算符,但到目前为止没有任何效果。
能否帮我构建正确的查询以获取所需的元素。
非常感谢您。
编辑:
使用 $elemMatch
测试过滤器:
它应该找到这个元素:
您可以使用 $elemMatch
来匹配相同元素中的两个字段
db.collection.find({
positions: {
$elemMatch: {
branch: "60691ada4a9943d8eb562874",
area: "60691aea4a9943d8eb562875"
}
}
})