我有一个运行良好的地理空间集合 - 给出一个简单的查询和数据返回如下:
> 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值?我尝试了几种变化,但似乎都没有给我我需要的东西......我知道我可以通过编程方式处理这个问题,但是想知道这是不是很有可能......
谢谢!
答案 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;
记录了这一点