Mongodb 如何与geoNear一起执行文本搜索?
我正在编写Mongo查询生成器,在文档中发现了两条语句: (文本搜索)包含$Text的$match阶段必须是管道中的第一个阶段 (地理搜索)只能将$geoNear用作管道的第一阶段Mongodb 如何与geoNear一起执行文本搜索?,mongodb,full-text-search,Mongodb,Full Text Search,我正在编写Mongo查询生成器,在文档中发现了两条语句: (文本搜索)包含$Text的$match阶段必须是管道中的第一个阶段 (地理搜索)只能将$geoNear用作管道的第一阶段 基本上意思是一样的,所以。。。如何将它们结合使用?我想你不能。我过去做过的一件事是执行两个查询,并将结果合并到应用程序代码中 我知道这是一个老问题,但我最近遇到了一个类似的问题,所以我想我应该发布我的解决方案 就我而言,我想要: 首先对用户提供的关键字使用全文搜索作为过滤器 然后,根据距离用户提供的坐标对结果进行排
基本上意思是一样的,所以。。。如何将它们结合使用?我想你不能。我过去做过的一件事是执行两个查询,并将结果合并到应用程序代码中 我知道这是一个老问题,但我最近遇到了一个类似的问题,所以我想我应该发布我的解决方案 就我而言,我想要:
- 首先对用户提供的关键字使用全文搜索作为过滤器
- 然后,根据距离用户提供的坐标对结果进行排序
- 用户可以选择提供关键字、位置或两者(较难的情况)
let query = {}
if(req.query.keywords){
if(req.query.lng || req.query.lat){
db.collection("service")
.find({ $text: { $search: req.query.keywords }})
.toArray()
.then(docs => query._id = { $in: docs.map(doc => doc._id) })
} else {
query.$text = { $search: req.query.keywords }
}
}
if(req.query.lat && req.query.lng){
query.location = {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [req.query.lng, req.query.lat]
}
}
}
}
db.collection("service").find(query)
基本上,如果文本搜索或地理搜索本身是需要的,那么构建适当的查询是没有问题的。如果两者都需要,它首先执行文本查询,然后将返回的文档ID作为筛选器传递给第二个
这是我能找到的最有效的解决方案 mongodb永远持有Ls。