其中条件为结果变量

时间:2015-06-11 12:42:11

标签: javascript node.js mongodb mongoose

现在我使用地理空间数据进行Moongose查询:

Locations.find({
    loc: {
        $geoWithin: {
            $centerSphere: [[lng, lat], radius / 6378.1],
        },
    }
}, cb);

它运行良好,但我的问题是如何获取所有Location文档,其中每个文档都有一个布尔变量,显示该特定文档是否在where子句的指定循环内。

1 个答案:

答案 0 :(得分:0)

您可以使用聚合$project阶段执行类似的操作,将条件投影为结果文档中的附加字段。遗憾的是,没有为聚合框架定义GeoSpatial运算符,因此您无法在单个MongoDB查询中实现目标。

如果您可以进行两个查询,可以尝试以下选项:

db.locations.aggregate([
    {$match: {
                loc: {
                        $geoWithin: {
                                       $centerSphere: [[lng, lat], radius / 6378.1],
                                    },
                     }
              }
     },
     {$project: 
                 {
                     ...
                     // all of your fields
                     ...
                     isWithin: true
                 }
     }                  
])

反过来做同样的事情,以匹配不在其中的文档,并将isWithin设置为false。这将人为地为您提供所需的结果。