【问题标题】:How to concat multiple fields in mongoose query?如何在猫鼬查询中连接多个字段?
【发布时间】:2020-08-07 12:54:57
【问题描述】:

我正在尝试在串联字段中查找()所有带有 LIKE 'query.name' 的文档,而不是使用 $or 来搜索单独的字段。

SQL 查询将是:

SELECT * FROM table WHERE column.name + ' ' + column.surname LIKE query.name

这是当前代码:

Model.find()
.and([
  {
    $or: [
      { name: new RegExp(req.query.name, 'i') },
      { surname: new RegExp(req.query.name, 'i') }
    ]
  },
  {
    $or: [
      { workPlace: new RegExp(req.query.place, 'i') },
      { location: new RegExp(req.query.place, 'i') }
    ]
  }
])

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    这可以在两阶段聚合查询中实现:想法是在第一阶段使用$addFields 将名称和位置字段连接为单独的过滤器属性,然后使用$match 和$regex 进行搜索在下一阶段。

    例子:

    db.collection.aggregate([
      {
        $addFields: {
          nameFilter: {
            $concat: ["$name", " ", "$surname"],
          },
          locationFilter: {
            $concat: ["$workplace", " ", "$location"],
          },
        },
      },
      {
        $match: {
          nameFilter: {
            $regex: req.query.name,
            $options: "i",
          },
          locationFilter: {
            $regex: req.query.place,
            $options: "i",
          },
        },
      },
    ]);
    

    mongo playground example link

    【讨论】:

      【解决方案2】:

      你应该阅读 Mongoose virtuals here 示例

        var personSchema = new Schema({
          name: {
            first: String,
            last: String
          }
        });
      
        // compile our model
        var Person = mongoose.model('Person', personSchema);
      
        // create a document
        var axl = new Person({
          name: { first: 'Axl', last: 'Rose' }
        });
      

      在您的情况下,架构可能是这样的

      var studentSchema = newSchema ({
      student: {
         name : String,
         surname : String,
         worplace : String,
         location : STring
      })
      

      在此之后,只需按照我给你的链接中的步骤操作即可。

      【讨论】:

      • 很遗憾,您无法查询 Mongoose Virtuals。为此,您必须获取所有条目并将它们与 Virtual 进行比较,这可能效率极低。
      猜你喜欢
      • 2015-12-30
      • 2021-12-10
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2017-09-30
      • 2021-08-03
      • 2020-02-17
      相关资源
      最近更新 更多