2015-05-08 46 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返回結果。 –

相關問題