syv
syv

Reputation: 3608

MongoDB Location NearBy unique

I have created a collection in DB and updated with proper indexing to retrieve it back. Im getting with the folloging

Example:

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]}}})

I have 100K + records in Database when I search the above query returns 20K records.

Actually this has some duplicate values in the "name" column. How can I get the distinct value of "name".

Upvotes: 2

Views: 187

Answers (1)

Stennie
Stennie

Reputation: 65363

You can't get the results you need using a query in MongoDB 2.0.x, so will need to manipulate the results in your application code.

If you are only after names you can limit the fields in the output:

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

If you want to find distinct names you could do something like:

// 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" ]

Upvotes: 2

Related Questions