【问题标题】:Mongodb Search Query with Populate and regex带有填充和正则表达式的 Mongodb 搜索查询
【发布时间】:2017-07-20 12:06:32
【问题描述】:

我想用 NodeJS 在 mongodb 上进行正则表达式搜索。

第一个是用户,第二个是类别。在这里,我在用户中保存了类别 ID 收藏。我想要一个过滤我的记录的搜索查询。

用户集合

{_id:'mongo_id', name:"User First",cat_id:2}
{_id:'mongo_id', name:"User Second",cat_id:2}
{_id:'mongo_id', name:"User Third",cat_id:1}
{_id:'mongo_id', name:"User Fourth",,cat_id:4}

类别 假设 id 是数字。出于演示目的,我编写了数值。

{_id:'1', name:"Salesman",}
{_id:'2', name:"Carpanter"}
{_id:'3', name:"Plumber"}
{_id:'4', name:"Engineer"}

如果我要输入 Carpanter 或 Carpan(regex),我有一个文本输入,那么我想要 2 条记录,或者 当我输入 User Second 或 second 时,我想要 1 条记录

var query = {
        'name': {
            $regex: req.body.name,
            $options: 'i'
        }
    };
innerQuery = {
        path: 'category',
        select: 'name'
    }    
Users.find(query)
.populate(innerQuery)
.sort({
    'createdDate': -1
})

【问题讨论】:

  • 请注意,正则表达式查询的性能并不高。如果您正在计划性能很重要的事情和/或数据库中有大量文档,您可能希望以不同的方式实现它。

标签: regex mongodb mongodb-query


【解决方案1】:

您的用户记录如下所示:

{_id:'mongo_id': name:"User First",cat_id:2}

我假设额外的: 是一个错字。

除此之外,您还尝试查询title。该记录中没有路径title,因此无法查询。

您还尝试填充路径 category,但用户记录中没有具有该名称的字段。我看到的唯一相关字段是cat_id。

例如,如果您想通过name 查询并填充cat_id,您可以执行以下操作:

var query = {
  'name': {
    $regex: req.body.title,
    $options: 'i'
  }
};

var innerQuery = {
  path: 'cat_id',
  model: 'Category',
  select: 'name'
};

这完全取决于您是否将模型命名为 Category,以及您的架构实际上是什么样的。

(PS,您也尝试按createdDate 排序,但我也没有在您的任何记录中看到该字段)。

【讨论】:

  • 是的,我已经修改了我的问题。是否可以在 User 和 Category 模型上添加正则表达式。因为我也想在填充时使用正则表达式。
猜你喜欢
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多