用mongoose进行部分搜索

时间:2016-09-07 07:28:50

标签: node.js mongoose

当我只提供部分查询时,我试图让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有没有办法做到这一点?

4 个答案:

答案 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"
});

Here is the document

你可以使用elasticsearch来做到这一点,当文档增长时,你应该考虑这种方式。