比使用$ or更好的查询$ geoNear中多个字段的方法?

时间:2018-09-29 00:01:38

标签: mongodb indexing nosql aggregation-framework geonear

我有一个活动列表。我想在titledescription字段中搜索某个短语,并返回与查询匹配的给定半径内的事件。

我当前正在使用$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();

1 个答案:

答案 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();

我一直使用这种方式,从来没有尝试过这种方式。