2013-06-26 37 views
8

Làm cách nào để có được N bản ghi mới nhất với thiên thạch mongodb?lấy N hồ sơ mới nhất

Tôi biết tôi có thể làm điều đó như thế này với mongodb bình thường: db.foo.find().sort({_id:1});, vì vậy tôi nghĩ điều này sẽ làm việc với thiên thạch: collection.find({chatroom: Session.get("room")}, {sort: {_id:1}, limit: N }).

Nhưng điều này chỉ trả về một số tài liệu "ngẫu nhiên". Tôi đoán chúng là 10 bản ghi có giá trị _id thấp nhất, như _id = aaaaa và _id = aaaab.

Tôi thiếu gì ở đây? Trong Mongodb bình thường của nó supereasy ?!

+0

hoặc bạn có thể có một trường như dấu thời gian sau đó sắp xếp bởi timestamp – crapthings

+0

yea của bạn, nhưng điều đó không nên là cần thiết với MongoDB bởi vì tôi có thể nhận được điều đó từ _id? – tobbe

Trả lời

9

Thử sử dụng $natural trình phân loại sắp xếp của mongoDB.

collection.find({chatroom: Session.get("room")}, {sort: {$natural : 1}, limit: N }); 

Thứ tự tự nhiên là thứ tự mà cơ sở dữ liệu lưu trữ tài liệu trên đĩa. Thông thường, một thứ tự chèn.

Tôi sử dụng giá trị date_created để sắp xếp bình thường. Vì thỉnh thoảng, trật tự tự nhiên thay đổi khi bạn thực hiện các hoạt động update trên các tài liệu hiện có.

+0

ah ok, bị bệnh tạo ra một date_created thay thế sau đó. Giải thích lý do tại sao! – tobbe

+1

Tôi có thể hỏi thêm một câu hỏi nữa không? :) Bây giờ nếu tôi sắp xếp chúng và khiến chúng có họ kết thúc như thế này: (trên cùng) mới nhất mới cũ lâu đời nhất (dưới) .. nhưng tôi muốn thứ tự ngược lại để các chương trình mới nhất ở phía dưới , Làm thế nào tôi có thể làm điều đó? Ive đã thử sử dụng cả date_created: 1 và -1 với giới hạn (10). Nhưng khi sử dụng "1" tôi chỉ thấy 10 người lớn tuổi nhất: / – tobbe

4

Tôi cũng gặp khó khăn về giới hạn (tôi cho rằng đó là lỗi Meteor). Tôi đã kết thúc bằng văn bản chức năng này:

Template.content.messages = function() { 
    var items = Messages.find({}, {sort: {timestamp : 1} }).fetch(); 
    return items.slice(-15); 
} 

lĩnh vực Timestamp được định nghĩa như thế này:

timestamp: new Date().getTime() 
Các vấn đề liên quan