我想用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
})
答案 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
排序,但我也不会在您的任何记录中看到该字段。