2012-02-09 27 views
5

Khi tôi không sử dụng pagination, mọi thứ hoạt động tốt (tôi chỉ có 3 hồ sơ trong bộ sưu tập này, vì vậy tất cả trong số họ được liệt kê ở đây):Trong MongoDB, cách lọc theo vị trí, sắp xếp theo một trường khác và phân trang kết quả chính xác?

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1}) 
{ "_id" : ObjectId("4f33ff549112b9b84f000070"), "badge" : 3, "name" : "Dedetizadora Alvorada" } 
{ "_id" : ObjectId("4f33ff019112b9b84f00005b"), "badge" : 2, "name" : "Sampex Desentupidora e Dedetizadora" } 
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" } 

Nhưng khi tôi cố gắng để đánh số trang từ đầu đến trang thứ hai, một bản ghi không hiển thị và một bản ghi không được hiển thị và một bản ghi được lặp lại:

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1}).skip(0).limit(2) 
{ "_id" : ObjectId("4f33ff549112b9b84f000070"), "badge" : 3, "name" : "Dedetizadora Alvorada" } 
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" } 

db.suppliers.find({location: {$near: [-23.5968323, -46.6782386]}},{name:1,badge:1}).sort({badge:-1}).skip(2).limit(2) 
{ "_id" : ObjectId("4f33feae9112b9b84f000046"), "badge" : 1, "name" : "Higitec Desentupimento e Dedetização" } 

Tôi đang làm điều gì đó sai hoặc đây là lỗi nào đó?


chỉnh sửa:

Here is một workaround cho việc này. Về cơ bản bạn không nên kết hợp các truy vấn gần $ với phân loại; sử dụng $ trong thay thế.

+0

@doorat, bạn có thể thêm tọa độ vị trí của cả ba tài liệu .. tôi sẽ chạy nó qua đây và cho bạn biết – RameshVel

+0

Thực ra truy vấn của bạn không có ý nghĩa gì nhiều. '$ near' không có' $ maxDistance'-tham số trả về tất cả danh sách các mục, được sắp xếp theo khoảng cách từ điểm đã cho. Bạn cố gắng sắp xếp theo một trường khác. Vì vậy, tại sao bạn cần '$ gần', sau đó? – Dao

+0

@Dao, bạn nói đúng, nhưng tôi thực sự đang sử dụng thuộc tính $ maxDistance trong mã, tôi chỉ quên bao gồm nó trong các truy vấn mẫu này. –

Trả lời

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