位置数组中的MongoDb geoWithin

时间:2014-10-25 00:25:26

标签: mongodb meteor

我正在使用meteor来查询mongodb集合。现在这是我的查询,其中location是一个2dsphere索引。

       messages.find({ 
         location: 
           { 
                $geoWithin :{$centerSphere : [ [ longitude, latitude ] , radius ] }
           }
       });

如果'location'是一个包含2dsphere索引的数组,并且我想要任何数组包含radiuslongitude, latitude内的元素的条目,我需要在此查询中更改什么?

1 个答案:

答案 0 :(得分:4)

文档结构如

{
    "_id" : ObjectId("544e65dc0d86a53a8b32f7d0"),
    "locs" : [
        {
            "loc" : {
                "type" : "Point",
                "coordinates" : [
                    -71.97,
                        43.77
                ]
            }
        },
        {
            "loc" : {
                "type" : "Point",
                "coordinates" : [
                    -63.97,
                    48.77
                ]
            }
        }
    ]
}

如果使用

构建2dsphere索引
> db.test.ensureIndex({ "locs.loc" : "2dsphere })

然后您可以执行所需的查询,例如

> db.test.find({ 
     "locs.loc" : { 
            "$geoWithin" : { "$centerSphere" : [ [ longitude, latitude ] , radius ] }
       }
   }

这项工作是因为数组上的索引是多键的,并且将为文档的每个数组元素创建一个索引条目。