mongodb - 在 $geoNear 中查询多个字段比使用 $or 更好的方法?
问题描述
我有一个事件列表。我想在title
和description
字段中搜索某个短语并返回与查询匹配的给定半径中的事件。
我目前正在使用$or
运营商,这似乎工作。但是,我想知道是否有更好的方法来做到这一点?我创建了一个使用这两个字段的复合文本索引;我只是不确定它是否真的被使用了。
let queryText = /someString/;
return db.collection('events').aggregate([
{
$geoNear: {
near: [lng, lat],
distanceField: 'distance',
maxDistance: radius,
query: {
$or: [
{title: queryText},
{description: queryText}
]
},
spherical: true
}
}
]).toArray();
解决方案
您可以将您的查询包含在另一个参数中(记住 $geoNear 必须始终位于顶部),如下所示
let queryText = /someString/;
return db.collection('events').aggregate([
{
$geoNear: {
near: [lng, lat],
distanceField: 'distance',
maxDistance: radius,
spherical: true
},
{
$match: {
$or: [
{title: queryText},
{description: queryText}
]
}
}
]).toArray();
我一直使用这种方式,我以前从未尝试过你的方式。
推荐阅读
- laravel-5 - 我已经通过 post 方法将图像文件存储在管理员中,但是当尝试为 pdf/word 放置相同的代码时,它不起作用
- jquery - jquery数据表每一行的下拉菜单
- mosquitto - MosquittoClient 的订阅者在间隔时间段内不显示单个订阅的消息
- javascript - 访问 Braintree 数组内部的问题
- android - 如何使这个设计成为android?
- java - 如何从列表视图内的线性布局中动态添加的视图中获取多个edittext值
- node.js - 如何使用heroku免费服务减少网页的TTFB
- intellij-idea - 为什么在 Intellij idea 中生成持久性映射时会为一对多/多对多关系创建额外的实体类?
- phpmyadmin - 在我的数据库中显示名称而不是 RFID 卡号
- spring-webflux - Spring Cloud Gateway 中的 Web Socket 安全性