2015-05-08 27 views
0

我试图让最近的用户的详细信息(选择的用户)

var listData = db.bloodDonarModel.find({_id:{$in:donarIds}}, {location: { $near: [83.307974, 17.716456]}}).limit(10) 

MySQL的等效查询就像

select * from users where user_id IN (1,2,3) and (distance logic); 

什么是正确的查询来获得结果,有人可以纠正我吗?

UPDATE:

我都试过这些查询,结果是突出了各自的彩色框 enter image description here

注: 我已经添加一个索引

db.blooddonars.ensureIndex({Location:"2d"}) 

谢谢

回答

0

你有没有试过这个明显的?

{ 
    $and : [ { 
     _id : { 
      $in : donarIds 
     } 
    }, { 
     location: { 
      $near: [ 83.307974, 17.716456 ] 
     } 
    }] 
} 

分别

var listData = db.bloodDonarModel.find({ $and : [ { _id : { $in : donarIds }}, { location: { $near: [ 83.307974, 17.716456 ]}}]}).limit(10) 
+0

感谢您的重播,与索引相关的错误突然出现。 –

1

你并不需要在你的情况下,明确$and。引用the documentation

当指定逗号分隔的表达式列表时,MongoDB提供了一种隐含的AND操作。当需要在多个表达式中指定相同的字段或运算符时,使用与$和运算符的显式AND是必要的。

所以,你可以在同一查询对象这里简单组几个条件:

var listData = db.bloodDonarModel.find(
      { 
      _id:{$in:donarIds}, 
      location: { $near: [83.307974, 17.716456]} 
      }).limit(10) 

这将匹配具有donarId_idlocation[83.307974, 17.716456]任何文件。

当然,如解释in the doc$near需要在location字段上的地理空间索引。例如:

> db.bloodDonarModel.createIndex({location: "2d"}) 
+1

感谢您的回复,我早些时候尝试过。但是它提供了有关索引的错误。请检查我的更新后的文章 –

+0

@ Ramaraju.d *这*非常有趣。我看不到错误。你编辑了你的问题吗? –

+0

这工作。但它只显示了5条记录,而不是12条。它只返回了具有位置字段的记录,它没有显示其他7.我最近包含位置字段,因此这7个文档没有位置字段。我也需要那些7返回结果。 –

相关问题