我有一个活动列表。我想在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();
答案 0 :(得分:0)
您可以像这样将查询包含在另一个参数中(请记住,$ 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();
我一直使用这种方式,从来没有尝试过这种方式。