我正在尝试使用节点js.my结果数组的mongo数据库中的搜索功能始终为空。我在这里分享了我的代码。有人帮我找错了。 搜索后我在控制台中得到一个空数组[。]
模型/ contact.js
var mongoose = require('mongoose');
var ContactSchema = new mongoose.Schema({
cid: String,
name: {type: String, index: true},
phon: Number,
contactwith: {type: String, index: true}
});
module.exports = mongoose.model('Contact', ContactSchema);
mongoose.model('Contact', ContactSchema).ensureIndexes(function(err) {
if (err)
console.log(err);
else
console.log('create contact index successfully');
});
控制器/ contact.js
var mongoose = require('mongoose');
var Contact = mongoose.model('Contact');
var ContactController = function(app,mongoose){
app.post('/search',function(req,res){
var query = req.body.searchbx;
console.log(query);
var dbsearch = Contact.find({$text: {$search: query}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}});
console.log(dbsearch);
Contact.find({$text: {$search: query }}, function (err, results){
if(err){
console.log(err);
}
if(results){
console.log('in results')
console.log(results)
res.render("search",{results: results});
}
})
});
}
module.exports = ContactController;
在玉器文件中
form(id="search-filter" method ="POST" action="/search")
input#search-bx(type='text', name='searchbx' placeholder="search here")
input(type="submit", value="Search")
答案 0 :(得分:0)
我希望你是nodeJS的初学者。欢迎:))
除了两件重要的事情外,你做了很多事情!
请阅读: http://restfulapi.net/http-methods/
您已尝试进行文字搜索。 $ text查询工作,mongodb需要使用文本索引索引字段。 你想在你的猫鼬中做一些改变
{fields:{type:[String],text:true}
REF: https://docs.mongodb.com/v3.2/core/index-text/
这是简单而干净的代码: 你可以根据样本进行修改
var mongoose = require('mongoose');
module.exports = mongoose.model('Todo', {
name : {type : String, unique: true, text: true},
location: {type: String}
});
Controller:
app.get('/api/todo/search/:searchKey', function (req, res) {
var searchKey = req.params.searchKey;
if (!searchKey) {
return res.send({ reason: 'searchKey required' });
}
Todo.find({
$text: { $search: searchKey }}, function(err, result) {
if (err) {
res.status(500);
return res.send({ reason: err.toString() });
} else if (result && result.reason) {
return res.status(400).send(result);
}
return res.status(200).send(result);
});
});
一切顺利!