当我只提供部分查询时,我试图让Mongoose在查询中返回结果。例如:我有一个'公司'列出了一堆公司的架构。文档示例:
{
"_id" : ObjectId("57aabeb80057405968de1539"),
"companyName" : "Vandelay Industries",
"owner" : "Ary Vandelay",
"inception" : 2012,
"__v" : 1
}
因此,如果我执行这样的搜索查询:
Company.findOne(
{ companyName: Vandelay Industries }, function (err, company) {
if (company) {
//do stuff
}
});
这将生成文档。但如果我做以下事情,我就不会得到结果:
Company.findOne(
{ companyName: Vandelay }, function (err, company) {
if (company) {
//do stuff
}
});
我希望能够进行这些类型的部分搜索并仍能得到结果。用Mongoose有没有办法做到这一点?
答案 0 :(得分:1)
为了实现这一目标,您可以使用正则表达式搜索来获得所需的结果。
var searchKey = new RegExp('Vandelay', 'i')
Company.findOne({ companyName: searchKey }, function (err, company) {
if (company) {
//do stuff
}
});
参考this stackoverflow post。
答案 1 :(得分:0)
您可以使用此query
获取特定值的结果
Company.findOne({"companyName": /Vandelay/},function(err,company){
if(!err){
console.log(company);
}
});
答案 2 :(得分:0)
要更快地获得结果,您应该使用索引参考https://docs.mongodb.com/manual/text-search/。
db.Company.createIndex( { companyName: "text" } )
然后您可以搜索
db.Company.find( { $text: { $search: "company name" } } )
但这仅支持全字搜索,不支持部分单词搜索,因此在此添加额外的一行会有所帮助
db.Company.find({ $or: [
{ $text: { $search: query } },
{ companyName: { $regex: '^' + 'copmany name'} }
]}
这将帮助您更快地搜索结果
答案 3 :(得分:-1)
你在进行全文搜索吗?如果你这样做:
TagGroup.find({
$text: {
$search: text
}
}, {
score: {
$meta: "textScore"
}
}).sort({
score: {
$meta: 'textScore'
}
})
请尝试以下代码。您还需要在该架构上创建索引
TagGroupSchema.index({
"$**": "text"
});
你可以使用elasticsearch来做到这一点,当文档增长时,你应该考虑这种方式。