2012-07-09 17 views
5

Tôi đang sử dụng CasbahSalat để tạo ra dao MongoDB của riêng tôi và đang thực hiện một phương pháp GetAll như thế này:Làm thế nào để lấy tất cả các đối tượng trong một bộ sưu tập Mongodb bao gồm các id?

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

Những gì tôi muốn biết là:

  1. Có cách nào tốt hơn để truy xuất tất cả các đối tượng?
  2. Khi tôi lặp qua các đối tượng, tôi không thể tìm thấy đối tượng _id. Nó có bị loại trừ không? Làm cách nào để đưa nó vào danh sách?

Trả lời

5

1 °/Đặc điểm ModelCompanion cung cấp phương thức def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty). Bạn sẽ phải thực hiện một yêu cầu riêng cho từng bộ sưu tập mà cơ sở dữ liệu của bạn có.

Nếu bạn lặp qua các đối tượng quay trở lại, nó có thể là tốt hơn để lặp với trả về bởi các dao.find hơn là làm hai lần lặp (một với toList từ Iterator đặc điểm sau đó khác trên List[T] của bạn).

2 °/Salat ánh xạ khóa _id với trường id lớp học của bạn. Nếu bạn định nghĩa một lớp có trường id: ObjectId. Trường này được ánh xạ với khóa mongo _id. Bạn có thể thay đổi hành vi này bằng cách sử dụng @Key chú thích như đã chỉ ra trong Salat documentation

1

tôi thực hiện một cái gì đó như:

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

này fetches tất cả id, nhưng với phạm vi rộng về những gì bạn có thể làm , có lẽ không phải là giải pháp tốt nhất cho mọi tình huống. Ngay bây giờ, tôi đang xây dựng một hệ thống nhỏ với 5 bản ghi dữ liệu và sử dụng nó để hiểu cách MongoDB hoạt động.

Nếu đây là cơ sở dữ liệu sản xuất với 1.000.000 mục nhập, thì điều này (hoặc bất kỳ truy vấn getAll nào) sẽ là ngu xuẩn. Thay vì làm điều đó, hãy xem xét cố gắng viết một truy vấn được nhắm mục tiêu theo sau các kết quả thực mà bạn tìm kiếm.

Các vấn đề liên quan