Фильтрация mongodb геопространственных данных? - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть геопространственная коллекция, которая работает хорошо - учитывая простой запрос и возвращаемые данные, как это:

    > 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"
        }
    },

Есть ли способ сформировать этот запрос, чтобы я только возвращал (список) значений id_geo из коллекции? Я пробовал несколько вариантов, но ни один из них, похоже, не дает мне того, что мне нужно ... Я знаю, что могу справиться с этим программно, но мне было интересно, было ли это монопольно возможным ...

спасибо!

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Вам действительно нужно 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} 
)
0 голосов
/ 20 декабря 2011

Попробуйте указать параметр fields:

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

Это задокументировано для команды findAndModify .

...