2012-07-09 49 views
5

我使用CasbahSalat創建自己的MongoDB的DAO和正在實施GETALL方法是這樣的:如何檢索包含ID的Mongodb集合中的所有對象?

val dao: SalatDAO[T, ObjectId]  
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList 

我想知道的是:

  1. 有沒有更好的辦法檢索所有對象?
  2. 當我迭代對象時,找不到對象的_id。它被排除了嗎?我如何將它包含在列表中?

回答

5

1°/ ModelCompanion特徵提供def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)方法。您必須爲您的數據庫的每個集合都進行專門的請求。

如果你遍歷返回的對象,它可以更好地與由dao.find返回而不是做兩次迭代迭代(一個與toListIterator特質然後又在你List[T])。

2°/薩拉特將_id鍵映射到您的班級ID字段。如果您使用id: ObjectId字段定義類。該字段使用mongo _id鍵映射。 您可以使用@Key註釋改變這種行爲,因爲在Salat documentation

1

指出我實現這樣的:

MyDAO.ids(MongoDBObject("_id" -> MongoDBObject("$exists" -> true)))

這將提取所有的ID,但由於各種各樣的東西,你可能會做,可能不是所有情況下的最佳解決方案。現在,我正在構建一個包含5條記錄數據的小系統,並用它來幫助理解MongoDB的工作方式。

如果這是一個包含1,000,000個條目的生產數據庫,那麼這個(或任何getAll查詢)將是愚蠢的。不要這樣做,可以考慮編寫一個有針對性的查詢,追蹤您尋求的真實結果。

相關問題