Как получить все объекты в коллекции Mongodb, включая идентификаторы?

Я использую Casbah и Salat для создания моего собственного дао Mongodb и реализации метода getAll следующим образом:

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

Я хочу знать следующее:

  1. Есть ли лучший способ получить все объекты?
  2. Когда я перебираю объекты, я не могу найти _id объекта. Это исключено? Как включить его в список?

person uzilan    schedule 09.07.2012    source источник


Ответы (2)


1°/ Трейт ModelCompanion предоставляет def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty) методов. Вам нужно будет сделать специальный запрос для каждой коллекции, которая есть в вашей базе данных.

Если вы выполняете итерацию по возвращенным объектам, может быть лучше выполнить итерацию с SalatMongoCursor[T], возвращаемым dao.find, а не делать две итерации (одну с чертой toList from Iterator, а затем другую с вашим List[T]).

2°/ Salat сопоставляет ключ _id с полем идентификатора вашего класса. Если вы определяете класс с полем id: ObjectId. Это поле сопоставляется с ключом mongo _id. Вы можете изменить это поведение с помощью аннотации @Key, как указано в документации Salat.

person kheraud    schedule 09.07.2012

Я реализовал что-то вроде:

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

Это извлекает все идентификаторы, но, учитывая широкий спектр того, что вы можете делать, вероятно, не лучшее решение для всех ситуаций. Прямо сейчас я создаю небольшую систему с 5 записями данных и использую ее, чтобы понять, как работает MongoDB.

Если бы это была производственная база данных с 1 000 000 записей, то этот (или любой запрос getAll) был бы глупым. Вместо этого подумайте о том, чтобы попытаться написать целевой запрос, который будет преследовать реальные результаты, которые вы ищете.

person gregturn    schedule 25.07.2012