使用Populate和regex进行Mongodb搜索查询

时间:2017-07-20 12:06:33

标签: regex mongodb mongodb-query

我想用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(正则表达式),我有一个文本输入然后我想要2条记录,或者 当我输入用户秒或秒时我想要1个记录

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

1 个答案:

答案 0 :(得分: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排序,但我也不会在您的任何记录中看到该字段。