1

我有一组结构如下的文件

{ _id: ObjectId("54723e44ec73a702fc979fc9"), 
    Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
    End: { type: "Point", coordinates: [ -0.1258020000000215, 51.44695 ] } 
}

我正在运行以下查询以尝试查找起点为距点 2000 个单位且终点距点为 1 个单位的文档。

"Start" : 
     { "$near" : 
          { "$geometry" : 
             { "type" : "Point", 
                   "coordinates" : [-0.12580200000002151, 51.44695]
              }
          },
      "$maxDistance" : 2000.0 
 }, 
 "End" : 
    { "$near" : 
         { "$geometry" : 
             { "type" : "Point", 
                    "coordinates" : [-0.12580200000002151, 51.44695]
             }
         },
      "$maxDistance" : 1.0 
    } 

当我运行查询时,它总是返回文档,就好像它正在执行或一样。所以 start 是从一个点开始的 x 个单位,或者 end 是从一个点开始的 x 个单位。因此,如果我在以下两个文档上运行它,它会返回两个我只希望返回第一个的地方。

{ _id: ObjectId("54723e44ec73a702fc979fc9"), 
  Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
  End: { type: "Point", coordinates: [ -0.1258020000000215, 51.44695 ] }
}
{ _id: ObjectId("54724f0cec73a70c383a27d4"), 
  Start: { type: "Point", coordinates: [ -0.15261409999993703, 51.4428311 ] }, 
  End: { type: "Point", coordinates: [ -0.09553900000003068, 51.427025 ] } 
}

我相信我应该能够做到这一点

http://blog.mongodb.org/post/50984169045/new-geo-features-in-mongodb-2-4

“此外,我们可以在同一个复合索引中拥有多个 2dsphere 索引。这允许进行如下查询:“查找起点位置在肯尼迪国际机场 50 英里范围内,终点位置在 YYC 100 英里范围内的路线”。

为了澄清。上面显示的查询应该在 START location $near point AND END location $near point 上执行 AND 查询。但它实际上似乎在做的是 START location $near point OR END location $near point。

如何对单个文档中的两个 $near 查询执行 AND 查询?

4

0 回答 0