Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将两个字段中的一个与$in和$elemMatch匹配_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 将两个字段中的一个与$in和$elemMatch匹配

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: [

合并$in和$elemMatch

我试图找到员工名字或姓氏的部分匹配项。我尝试使用$or运算符,但Mongo似乎没有识别它

我哪里做错了

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
}
]
}
}
})