2

我在数据库中创建了一个集合,并使用适当的索引进行了更新以将其取回。我得到了以下

例子:

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 + 记录。

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

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 回答