在使用 mongodb 的 geoNear 命令和附加查询来过滤结果时,我遇到了一些问题。以下查询是使用 rockmongo 进行的。
在我的集合“poi”中,文档有“profiles”,它是一个包含 objectids 的数组。搜索它们时:
{
geoNear : "poi",
near : [19,47],
query : {profiles : ObjectId("511f360901c610e813000004")}
}
我没有结果。
Response from server: { "ns": "local.poi", "near": "1100010010100011101101101111001010100011101101101111", "results": [
], "stats": {
"time": NumberInt(2),
"btreelocs": NumberInt(0),
"nscanned": NumberInt(510),
"objectsLoaded": NumberInt(510),
"avgDistance": 0,
"maxDistance": 0 }, "ok": 1 }
但是,如果没有查询,甚至使用简单的 {profiles : ObjectId("511f360901c610e813000004")} 查询,我都会得到预期的结果。
另一个问题是当我有大约一半的文档带有“name”“x”,而另一半带有“y”时,查询
{
geoNear : "poi",
near : [47,19.5],
query : {"$and" : [{name : { "$in" : [/.*y.*/i]}}]}
}
当简单的 {"$and" : [{name : { "$in" : [/. 是的。/i]}}]} 给他们。这个示例查询实际上可以很简单,尽管结果没有区别,这更像是我在项目中的实际查询。
当我用 PHP 尝试这些时,无论是否传递了额外的查询,我都会得到结果,因此每个文档都按距离排序。
请帮我看看我是否做错了。