2

DBでコレクションを作成し、それを取得するために適切なインデックスで更新しました。私は次のことをやっています

例:

db.car.save({ "name":"Toyota car", "affiliation":"Toyota", "loc":{"lon":55.93939251390387,"lat":-113.999}})

db.car.find({"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}})

上記のクエリを検索すると、データベースに100K以上のレコードがあり、20Kレコードが返されます。

実際、これには「名前」列にいくつかの重複する値があります。「名前」の明確な値を取得するにはどうすればよいですか。

4

1 に答える 1

2

MongoDB 2.0.xのクエリを使用して必要な結果を取得することはできないため、アプリケーションコードで結果を操作する必要があります。

名前だけを使用している場合は、出力のフィールドを制限できます。

db.car.find(
    {"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}},
    {"_id": 0, "name": 1}
)

個別の名前を見つけたい場合は、次のようにすることができます。

// Save cars we've seen
> var cars_seen = {}

// The unique list we actually want
> var cars = []

// Find closest cars to given geo point
> db.car.find(
    {"loc" : {"$within" : {"$center" : [[50.93939251390,-114],5]}}},
    {"_id": 0, "name": 1}
).forEach(
    function(doc) {
        // Add names we haven't seen yet
        if (!cars_seen[doc.name]) {
            cars_seen[doc.name] = 1;
            cars.push(doc.name);
        }
    }
)

> cars
[ "Skoda", "Benz", "Skoda SUV" ]
于 2012-08-04T13:09:49.403 に答える