MongoDB使用文本搜索与查找结合查询

4
我正在尝试使用.find()查询过滤MongoDB集合,并对结果进行文本搜索,以降低查询成本,但我似乎无法链接这些命令。
以下是我尝试过但不起作用的内容:
db.jobs.find({
    "salary.max": {
        $gte: 50000,
        $lte: 120000
    }
}).runCommand("text", {
    search: "metal"
})

我也尝试了反向查询,但这并没有达到预期效果,同样不起作用。
在MongoDB中是否有一种方法可以将.runCommand().find()链接起来?
1个回答

5
find函数返回一个DBCursor,该对象没有.runCommand函数,因此无法工作。
但是,可以在text数据库命令中使用您的查找查询。正如您可以在文本搜索文档中阅读的那样,您可以将filter作为可选参数传递给文本命令。这些过滤器文档的工作方式与您传递给find的文档完全相同。
db.jobs.runCommand( "text", { 
    search: "metal",
    filter: { 
        "salary.max": {
            $gte: 50000,
            $lte: 120000
        }
    }
} );

你能否将基于位置的查询(2dsphere)链接到这个查询中? - A.M.K
@A.M.K 我认为它应该能够正常工作,地理空间操作符例如$nearSphere或者$geoWithin都是普通的筛选操作符,所以您可以将它们添加到您的筛选文档中。虽然文档指出每个集合只能有 一个文本索引一个地理位置索引,但它并没有说明不能同时拥有这两种索引。 - Philipp
好的,谢谢。在等待答案的时候,我尝试了一下 ElasticSearch,看起来切换带来的额外编码麻烦是值得的。 - A.M.K
1
为什么这些都是必需的?为什么文本搜索不是find()的一部分? - light24bulbs
1
@light24bulbs 我看到你对此发表了评论。我后来发现MongoDB是一个很棒的数据库引擎,但它并不适合搜索。Elasticsearch需要一些(很多?)时间来设置,但它非常值得。 - A.M.K
这在2.6中似乎已经被弃用了。 - Rajiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接