首页 > 解决方案 > 在 $geoNear 中查询多个字段比使用 $or 更好的方法?

问题描述

我有一个事件列表。我想在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();

标签: mongodbindexingnosqlaggregation-frameworkgeonear

解决方案


您可以将您的查询包含在另一个参数中(记住 $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();

我一直使用这种方式,我以前从未尝试过你的方式。


推荐阅读