我在数据库中创建了一个集合,并使用适当的索引进行更新以将其检索回来。我正在使用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”列中有一些重复值。如何获得“名称”的独特价值。
答案 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" ]