我正在将mongo与node js结合使用,并希望获取用于全文本搜索的数据。但是目前返回的是一个空数组[]
。
我的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
})
请帮助我获取数据。
答案 0 :(得分:0)
尝试如下搜索。
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)
});
});
答案 1 :(得分:0)
使用正则表达式进行搜索这样就可以了。
const searchText= "mail";
await EmailModel.find({
$or: [{text: {$regex: searchText}}, {subject: {$regex: searchText}}, {from: {$regex: searchText}}]
})
看看link
答案 2 :(得分:-1)
您还需要创建文本架构才能使其工作。 在您的情况下:
ProductSchema .index({
category: 'text',
name: 'text,
});