2012-07-09 5 views
5

J'utilise Casbah et Salat pour créer ma propre dao MongoDB et je mettre en œuvre une méthode getAll comme ceci:Comment récupérer tous les objets dans une collection Mongodb, y compris les identifiants?

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

Ce que je veux savoir est:

  1. Y at-il une meilleure façon de récupérer tous les objets?
  2. Lorsque je parcourt les objets, je ne peux pas trouver le _id de l'objet. Est-ce exclu? Comment l'inclure dans la liste?

Répondre

5

1 °/Le trait ModelCompanion fournit une méthode def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty). Vous devrez faire une demande spécifique pour chaque collection de votre base de données.

Si vous itérer sur les objets retournés, il pourrait être préférable de itérer avec le retourné par la dao.find plutôt que de faire deux itérations (un avec le toList de Iterator trait puis un autre sur votre List[T]). 2 °/Salat mappe la clé _id avec votre champ id de classe. Si vous définissez une classe avec un champ id: ObjectId. Ce champ est mappé avec la clé mongo _id. Vous pouvez modifier ce comportement en utilisant l'annotation @Key comme indiqué dans Salat documentation

1

j'ai mis quelque chose comme:

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

Ce récupère tous les ids, mais étant donné le large éventail de ce que vous pourriez faire , probablement pas la meilleure solution pour toutes les situations. En ce moment, je construis un petit système avec 5 enregistrements de données, et je l'utilise pour aider à comprendre le fonctionnement de MongoDB.

S'il s'agissait d'une base de données de production avec 1 000 000 entrées, cette requête (ou toute requête getAll) serait stupide. Au lieu de faire cela, pensez à essayer d'écrire une requête ciblée qui va après les résultats réels que vous recherchez.

Questions connexes