过滤mongodb地理空间返回数据?

时间:2011-12-19 21:10:36

标签: mongodb geospatial

我有一个运行良好的地理空间集合 - 给出一个简单的查询和数据返回如下:

    > distance = db.runCommand({ geoNear : "geodata_geo", near : [-121.8993988, 36.9771729], spherical : true, maxDistance : range / earthRadius, num : 3 }).results;
[
    {
        "dis" : 0,
        "obj" : {
            "CountryID" : 231,
            "_id" : ObjectId("4ecea8348044dc9bdd21eda3"),
            "cityCode" : "3183347",
            "cityID" : 952717,
            "cityName" : "Aptos",
            "countryCode" : "US",
            "countryName" : "United States",
            "countyCode" : "US005044",
            "countyID" : 5932,
            "countyName" : "Santa Cruz",
            "**id_geo**" : 952717,
            "lat" : 36.9771728515625,
            "loc" : {
                "lon" : -121.8993988,
                "lat" : 36.9771729
            },
            "lon" : -121.89939880371094,
            "regionCode" : "NAm",
            "regionID" : 1078,
            "regionName" : "North America",
            "stateCode" : "US005",
            "stateID" : 3725,
            "stateName" : "California"
        }
    },

有没有办法形成这个查询,以便我只返回集合中的(list of)id_geo值?我尝试了几种变化,但似乎都没有给我我需要的东西......我知道我可以通过编程方式处理这个问题,但是想知道这是不是很有可能......

谢谢!

2 个答案:

答案 0 :(得分:1)

你真的需要geoNear吗? docs表示“上面的find()语法通常是首选”。

如果你对find()没问题,那就很容易了。返回所有字段:

db.customers.find({ "addresses.billing_address.location" : 
  { $within : { $center : [[-117.15,32.72],0.15] } } }
)

返回相同的文档,但仅返回account_type字段:

db.customers.find({ "addresses.billing_address.location" : 
  { $within : { $center : [[-117.15,32.72],0.15] } } }, {"account_type" : 1} 
)

答案 1 :(得分:0)

尝试指定fields参数:

db.runCommand({ geoNear : "geodata_geo", 
                near : [-121.8993988, 36.9771729], 
                spherical : true, 
                maxDistance : 45, 
                num : 3 }, 
              {fields : { "obj.id_geo" : 1 } }).results;

findAndModify command

记录了这一点