2012-07-09 16 views
5

estoy usando Casbah y Salat para crear mi propia DAO MongoDB y estoy poniendo en práctica un método getAll así:¿Cómo recuperar todos los objetos de una colección de Mongodb, incluidos los identificadores?

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

Lo que yo quiero saber es:

  1. ¿Hay una mejor manera de recuperar todos los objetos?
  2. Cuando recorro los objetos, no puedo encontrar el _id del objeto. ¿Está excluido? ¿Cómo lo incluyo en la lista?

Respuesta

5

1 °/The ModelCompanion rasgo proporciona un def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty) métodos. Deberá realizar una solicitud específica para cada colección que tenga su base de datos.

Si iterar sobre los objetos devueltos, que podría ser mejor para iterar con el devuelto por el dao.find en lugar de hacer dos iteraciones (uno con el toList de Iterator rasgo luego otro en su List[T]).

2 °/Salat asigna la tecla _id con su campo de identificación de clase. Si define una clase con un campo id: ObjectId. Este campo está mapeado con la clave mongo _id. Puede cambiar este comportamiento usando la anotación @Key como se señala en Salat documentation

1

he implementado algo como:

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

Esto obtiene todos los identificadores, pero dada la amplia gama de lo que podría estar haciendo , probablemente no sea la mejor solución para todas las situaciones. En este momento, estoy construyendo un pequeño sistema con 5 registros de datos y usando esto para ayudar a entender cómo funciona MongoDB.

Si esta era una base de datos de producción con 1,000,000 entradas, entonces esta (o cualquier consulta getAll) sería estúpida. En lugar de hacer eso, considere intentar escribir una consulta específica que busque los resultados reales que busca.

Cuestiones relacionadas