带过滤器的mongodb geoNear命令

时间:2013-02-18 15:27:51

标签: php mongodb

在使用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]}}]}
}
当简单{“$和”:[{name:{“$ in”:[/。 y。 / i]}}]}给出它们时,

没有结果。事实上,这个示例查询可以非常简单,但结果没有区别,这更类似于我在项目中的实际查询。

当我使用PHP尝试这些时,无论传递的其他查询是什么,我都会得到结果,因此每个文档都按距离排序。

请帮我看看我做错了。

1 个答案:

答案 0 :(得分:0)

好的,问题在于PHP驱动程序。我发现它在mongo shell中工作,所以我切换回1.3.1,现在它可以工作了!