Node.js 将两个字段中的一个与$in和$elemMatch匹配
合并$in和$elemMatch 我试图找到员工名字或姓氏的部分匹配项。我尝试使用$or运算符,但Mongo似乎没有识别它 我哪里做错了Node.js 将两个字段中的一个与$in和$elemMatch匹配,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,合并$in和$elemMatch 我试图找到员工名字或姓氏的部分匹配项。我尝试使用$or运算符,但Mongo似乎没有识别它 我哪里做错了 router.get('/employees', async (req, res, next) => { if(req.query.name) { const response = await Companies.find({ employees: { $elemMatch: { $in: [
router.get('/employees', async (req, res, next) => {
if(req.query.name) {
const response = await Companies.find({ employees:
{
$elemMatch: {
$in: [
{ first_name:new RegExp(req.query.name, 'i') },
{ last_name:new RegExp(req.query.name, 'i') }
]
}
}
})
res.json({ response })
}
else { next() }
})
我的模式如下所示:
const companies = new mongoose.Schema({
company: [{
name: { type:String, required:true },
contact_email: { type:String, required:true },
employees: [{
first_name:String,
last_name:String,
preferred_name:String,
position: { type:String },
birthday: { type:Date },
email: { type:String },
}],
}]
}, {
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
})
我有一些应该匹配的名字(只包括“nna”),但向/employees?name=nna发送get请求只会返回一个空的响应数组。让员工返回的最方便的方法是放松,然后像这样匹配:
db.companys.aggregate({
“$REWIND”:“$EMPLOYEE”
}, {
“$project”:{
“员工”:“$employees”,
“\u id”:0
}
}, {
“$match”:{
“$or”:[
{
“员工姓名”:/anna/i
},
{
“员工姓氏”:/anna/i
}
]
}
})
另一方面,如果目标是让这些公司回归,那么这将起作用:
db.companys.find({
“雇员”:{
“$elemMatch”:{
“$or”:[
{
“名字”:/anna/i
},
{
“姓氏”:/anna/i
}
]
}
}
})
让员工回来最方便的方法是放松,然后像这样匹配:
db.companys.aggregate({
“$REWIND”:“$EMPLOYEE”
}, {
“$project”:{
“员工”:“$employees”,
“\u id”:0
}
}, {
“$match”:{
“$or”:[
{
“员工姓名”:/anna/i
},
{
“员工姓氏”:/anna/i
}
]
}
})
另一方面,如果目标是让这些公司回归,那么这将起作用:
db.companys.find({
“雇员”:{
“$elemMatch”:{
“$or”:[
{
“名字”:/anna/i
},
{
“姓氏”:/anna/i
}
]
}
}
})