0

鉴于以下文件:

{
  _id: 'foo'
  locations: [
    {
      lat: 1,
      lon: 2,
      type: 'home'
    },
    {
      lat: 10,
      lon: 20,
      type: 'office'
    }
  ]
}

{
  _id: 'bar'
  locations: [
    {
      lat: 10,
      lon: 20,
      type: 'home'
    },
    {
      lat: 1,
      lon: 2,
      type: 'office'
    }
  ]
}

是否可以在特定类型的位置附近找到所有文档?

例如,查询: db.objects.find({locations: {$near: {lat: 1, lon: 2}, $maxDistance: 1}, 'locations.type': 'home'})

返回 foo 和 bar 因为两者都有一个类型为 'home' 的位置和一个靠近 [1,2] 的位置

我想要查询做的是只找到 foo 因为它的家位置在 [1,2] 附近

4

1 回答 1

0

您可以考虑更改架构。考虑多个文档,而不是具有位置数组的单个文档,每个文档代表一个具有类型名称的单个位置。

您需要在此处执行的查询类型需要 $elemMatch 以保证在同一个数组元素上满足您的两个条件- 为此我们使用 elemMatch。不幸的是,它不适用于 geoSpatial 查询 - 至少目前没有办法构建它。有一张出色的Jira 票可以让它发挥作用。

于 2012-10-25T01:11:39.373 回答