我有一个基本文件,如下:
{
"_id" : ObjectId("5760fe623f6d3ad25e387ffc"),
"type": 5,
"product" : {
"location" : {
"geometry" : [ 153.39999999999998, -28.016667 ],
"name" : "Gold Coast QLD, Australia",
"id" : "ChIJt2BdK0cakWsRcK_e81qjAgM"
}
}
}
我正在尝试使用Mongodb提供的$near
方法查询位置。
这是我的疑问:
db.posts.find({
'product.location.geometry': {
$near: [ 153.39999999999998, -28.016667 ]
}
})
在Mongodb文档中,它声明:
要使用传统坐标指定点,$ near需要2d索引 并具有以下语法:
{
$near: [ <x>, <y> ],
$maxDistance: <distance in radians>
}
它甚至在他们的网站上提供了这个例子:
db.legacy2d.find({
location : { $near : [ -73.9667, 40.78 ], $maxDistance: 0.10 }
})
这是它产生的错误:
Error: error: {
"waitedMS" : NumberLong(0),
"ok" : 0,
"errmsg" : "error processing query: ns=mytestnodedb.postsTree: GEONEAR field=product.location.geometry maxdist=1.79769e+308 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
"code" : 2
}
我无法识别查询中的任何错误。 Mongo声称$near
必须是经度,然后是纬度,我肯定在做。我故意遗漏$maxDistance
,因为Mongo声明它将返回结果sorted from nearest to farthest
。
答案 0 :(得分:1)
错误是非常自我解释的。查询需要2d
索引,但无法找到。
我将索引创建为:
db.collection.createIndex({"product.location.geometry":"2d"})
现在,如果我对样本数据运行查询,我会得到
{
"_id" : ObjectId("5760fe623f6d3ad25e387ffc"),
"type" : 5.0,
"product" : {
"location" : {
"geometry" : [
153.39999999999998,
-28.016667
],
"name" : "Gold Coast QLD, Australia",
"id" : "ChIJt2BdK0cakWsRcK_e81qjAgM"
}
}
}