mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应
Posted
技术标签:
【中文标题】mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应【英文标题】:mongodb using node js returning [ ] in response during a full text search 【发布时间】:2019-05-02 09:11:03 【问题描述】:我正在使用带有节点 js 的 mongo 并且想要获取数据以进行全文搜索。但目前得到一个空数组[]
作为回报。
我的 API 请求如下 -
router.post('/products/search', function(req, res, next)
var search=req.body.search;
console.log(search)
Product.find($text:$search:search,function(err,data)
console.log(data)
res.send(data)
);
);
而数据库代码如下-
var ProductSchema = new Schema(
category: String,
name: String,
price: Number,
cover: String,
search:String
)
请帮我获取数据。
【问题讨论】:
您是否正确添加了索引? yes[ "_id": "5bfe79422005130af1da85e8", "category": "服装", "name": "华丽的橡胶键盘", "price": 50, "cover": "@987654321 @", "__v": 0 ] JonhnyHK 在这里的回答 ***.com/questions/28775051/… 应该有助于为您指明正确的方向。 【参考方案1】:尝试搜索如下。
db.products.createIndex( search: "text" )
router.post('/products/search', (req, res, next) =>
const search = req.body.search;
Product.find( $text: $search: search ).then(data =>
console.log(data)
res.json(data)
).catch(err =>
res.status(400).json(err.message)
);
);
如果您想使用正则表达式进行搜索。
router.post('/products/search', (req, res, next) =>
const search = new Regex(req.body.search, i);
Product.find(
$or [
category: search,
name: search,
cover: search,
price: search,
search: search
]
).then(data =>
console.log(data)
res.json(data)
).catch(err =>
res.status(400).json(err.message)
);
);
或者如果您只想在搜索字段中搜索
router.post('/products/search', (req, res, next) =>
const search = new Regex(req.body.search, i);
Product.find(search: search).then(data =>
console.log(data)
res.json(data)
).catch(err =>
res.status(400).json(err.message)
);
);
【讨论】:
【参考方案2】:使用正则表达式搜索这种方式,它的工作原理。
const searchText= "mail";
await EmailModel.find(
$or: [text: $regex: searchText, subject: $regex: searchText, from: $regex: searchText]
)
看看这个link
【讨论】:
【参考方案3】:您还需要创建文本模式才能使其工作。 在你的情况下:
ProductSchema .index(
category: 'text',
name: 'text,
);
【讨论】:
我按照你说的做了。但是,问题仍然存在。你能检查一下这是否适用于你吗?以上是关于mongodb 在全文搜索期间使用节点 js 返回 [] 作为响应的主要内容,如果未能解决你的问题,请参考以下文章