MongoDB位置NearBy独特

时间:2012-08-02 20:47:56

标签: node.js mongodb mongoose

我在数据库中创建了一个集合,并使用适当的索引进行更新以将其检索回来。我正在使用folloging

示例:

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

当我搜索上述查询返回20K记录时,我在数据库中有100K +记录。

实际上,“name”列中有一些重复值。如何获得“名称”的独特价值。

1 个答案:

答案 0 :(得分: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" ]