【问题标题】:Text search multiple fileds not working in nodejs and mongodb文本搜索多个字段在 nodejs 和 mongodb 中不起作用
【发布时间】:2020-07-24 03:32:13
【问题描述】:

我正在尝试通过连接这些名字、中间名和姓氏字段来进行搜索

这是我的模型

var lectureSchema = new mongoose.Schema({
 firstName:{
     type:String,
     require:"First Name can\'t be empty "
   },
 middleName:{
     type:String,
     require:"Middle Name can\'t be empty "

 },  
 lastName:{
     type:String,
     require:"Last Name can\'t be empty ",
  },
 email:{
     type:String,
     require:"Email can\'t be empty "
 }
};
lectureSchema.index({firstName:'text', middleName:'text',lastName:'text'});

mongoose.model('Lecture',lectureSchema); 

这也是我的函数响应搜索 API

module.exports.findLecture=(req,res)=>{
 var query = req.params.query;
 Lecture.find({
      $text: {
          $search:query
      }
      
  }, function(err, result) {
      if (err) throw err;
      if (result) {
          res.json(result)
      } else {
          res.send(JSON.stringify({
              error : 'Error'
          }))
      }
  })

} 

这是路线

router.get('/findLecture/:query',checkerUser.findLecture);

但是,这似乎只获取与 firstName 字段匹配的文档。它与 middleName 和 lastName 字段不匹配。请有人帮助我。

【问题讨论】:

  • 我认为developerslogblog.wordpress.com/2019/10/15/… 可能会有所帮助或者您可以尝试使用 $concat: ['$firstName', '$middleName', '$lastName']
  • 只是想知道通过连接字符串搜索名称的目的是什么?如果您收到的名称是全名,您可以拆分为获取 firstName、lastName 和 midlleName,并可能在 where 子句中使用 and 条件直接搜索。

标签: node.js mongodb


【解决方案1】:

我已经实现了查询来解决这个问题,

请点击链接,

https://mongoplayground.net/p/3GW2FYH95tj

您必须使用聚合查询来满足您的要求。

db.collection.aggregate([
  {
    $project: {
      name: {
        $concat: [
          "$firstName",
          "$middleName",
          "$lastName"
        ]
      }
    }
  },
  {
    $match: {
      name: {
        $regex: "john1unknown1Doe1"
      }
    }
  }
])

将“john1unknown1Doe1”替换为您的正则表达式值,例如 new Regex(req.query.search)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2021-05-16
    • 2013-09-18
    • 2018-03-10
    相关资源
    最近更新 更多