2013-02-18 66 views
0

当使用mongodb的geoNear命令和其他查询来过滤结果时,我遇到过一些问题。以下查询是用rockmongo进行的。带过滤器的mongodb geoNear命令

在我的收藏“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 } 

然而,如果没有查询,甚至一个简单的{概况:物件(“511f360901c610e813000004”)}查询我得到预期的结果。

的另一个问题是,当我有大约一半与“名”“X文件的”,而另一半为“Y”,查询

{ 
    geoNear : "poi", 
    near : [47,19.5], 
    query : {"$and" : [{name : { "$in" : [/.*y.*/i]}}]} 
} 

没有给出结果,当简单{” $和“:[{name:{”$ in“:[/。 yy。y。/i]}}]}给他们。这个示例查询实际上可以非常简单,但结果没有区别,这更像我在项目中的实际查询。

当我使用PHP进行尝试时,无论传递哪个附加查询,我都会得到结果,因此每个文档都按距离排序。

请帮我看看我是否做错了。

+0

当然,像{name:“x”}这样的其他过滤查询可以完美地工作,我正在努力应对这些“更复杂”的问题。 – azyoot 2013-02-18 15:30:01

回答

0

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

+0

这里PHP驱动程序不太可能出错。 [MongoDB :: command()](http://php.net/manual/en/mongodb.command.php)参数和结果没有特殊处理。 – jmikola 2013-02-19 17:15:39