【问题标题】:mongodb geoNear command with filter带有过滤器的 mongodb geoNear 命令
【发布时间】:2013-02-20 00:18:04
【问题描述】:

我在使用 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")} 查询,我都会得到预期的结果。

另一个问题是当我有大约一半的文档带有“名称”“x”,而另一半带有“y”的文档时,查询

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

当简单的 {"$and" : [{name : { "$in" : [/.y./i]}}]} 给出结果时,不会给出任何结果。这个示例查询实际上可以很简单,尽管结果没有区别,这更像是我在项目中的实际查询。

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

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

【问题讨论】:

  • 当然,像 {name : "x"} 之类的其他过滤查询也能正常工作,我正在为这些“更复杂”的查询而苦苦挣扎。

标签: php mongodb


【解决方案1】:

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

【讨论】:

  • PHP 驱动程序不太可能在这里出错。 MongoDB::command() 参数和结果没有特殊处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2017-09-26
相关资源
最近更新 更多