【问题标题】:Text search in MongoDB, keyword searchMongoDB中的文本搜索,关键字搜索
【发布时间】:2015-09-05 06:10:08
【问题描述】:

我正在尝试在我的 mongoDB 数据库中进行关键字搜索。在 mongoDB 控制台中:

db.logs.find({$text: {$search: 'key1'}})

给出正确的结果。但是当我在我的 nodejs 控制器上使用 mongoose-text-search 时,我得到了一个错误。这是架构的定义:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var textSearch = require('mongoose-text-search');

var Log = new Schema({
    keywords: [String],
    description: String,
    videoId: String,
    logId: String,
    date: Date,
    robot: String
});

Log.plugin(textSearch);
Log.index({ keywords: 'text' });

module.exports = mongoose.model('log', Log);

在控制器中,在某些时候我会这样做:

Log.textSearch('key1', function(err,output) {
    if (err){
        res.send(500,err);
    } else {
        console.log(output);
    }           
});

响应是:

{"name":"MongoError","message":"no such command: text","ok":0,"errmsg":"no such command: text","code":59,"bad cmd":{"text":"logs","search":"key1"}}

现在,仅凭该消息就会使您认为文本搜索不起作用,但正如我之前所展示的那样。我正在运行 MongoDB shell 版本 3.0.2,因此默认情况下启用文本搜索。

【问题讨论】:

  • 该插件是使用文本搜索的旧“db 命令形式”创建的,然后在 2.6 中集成到 MongoDB 的正常查询中。我相信该命令在 MongoDB 3.0.x 系列中已弃用。
  • 这很有意义......所以如果我使用猫鼬,我应该进行正常查询吗?我到处都能找到链接和推荐使用该插件的人。
  • 建议使用普通查询表单,如果不仅因为它似乎是与服务器上支持的方法保持同步的方法。

标签: node.js mongodb mongoose-plugins


【解决方案1】:

由于某种原因,我很难按照 moongose 的文档进行操作……事实证明,这在普通查询中很容易做到(不需要插件)。只是想知道它是如何完成的(不是我的实际代码,而是用来测试这个想法的代码)

router.get('/keywordsearch', function (req,res) {

        var query = Log.find();

        var findKeywords = [];
        if (req.query.keywords != '')
        {
            var words = req.query.keywords.split(",");

            for (ii=0; ii<words.length; ii++)
                findKeywords[ii] = {keywords: words[ii].trim()};

            console.log(findKeywords);
            query.or(findKeywords);
        }

        query.exec(function (err,logs) {
            if (err){
                res.send(500,err);
            } else {
                req.logsList = logs;

                res.render('searchdb',{user:req.user,logs:req.logsList});
            }
        });

});

这意味着您可以使用以下方法进行关键字搜索:

find({keyword: 'blablabla'})

并对许多关键字使用 OR 逻辑运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2012-03-26
    • 1970-01-01
    • 2011-09-14
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多