2012-03-24 8 views
5

Tôi có một mô hình:ngày trong Mongoid truy vấn

class SimpleAction 
    include Mongoid::Document 
    field :set_date, :type => Date 

và tôi có một số dữ liệu trong bộ sưu tập:

{ "_id": ObjectId ("4f6dd2e83a698b2518000006"), "tên": " bị mất ", " ghi chú ":" "," set_date (1i) ":" 2012 "," set_date (2i) ":" 3 ", " set_date (3i) ":" 25 "," set_date (4i) ":" 13 "," set_date (5i) ":" 57 ", " thời lượng ": 15," todo ":" 4 "}

Bạn có thể thấy ngày lưu trữ mongoid trong năm trường - set_date (ni).

Tôi đã hai câu hỏi:

  • Làm thế nào tôi có thể lọc dữ liệu theo nhiều set_date trong Mongo console khách hàng? Một cái gì đó như thế này:

    db.simple_actions.find({ set_date : { "$lte" : new Date() } }) 
    

    Truy vấn của tôi không trả về bất kỳ dữ liệu nào.

  • Làm cách nào để lọc dữ liệu theo trường set_date trong bộ điều khiển Rails của tôi? Một cái gì đó như thế này:

    @simple_actions = SimpleAction.where(:set_date => { '$lte' => Date.today }) 
    

Trả lời

12

tôi khuyên bạn không sử dụng Date, nhưng thay vào đó DateTime:

field :set_date, :type => DateTime 

Bây giờ không chỉ nó sẽ được lưu trữ trong 1 lĩnh vực, như vậy:

"set_date" : ISODate("2012-03-14T17:42:27Z") 

Nhưng Mongoid sẽ xử lý chính xác các chuyển đổi khác nhau cho các truy vấn như bạn muốn:

SimpleAction.where(:set_date => { :$lte => Date.today }) 
+0

Hmm .. tôi đã thay đổi mô hình difinition và chèn recodrs mới trong bộ sưu tập, nhưng không có gì thay đổi. – demas

+0

Đây là đoạn biểu mẫu: <% = f.datetime_select: set_date%> – demas

+0

Bạn có thể cụ thể hơn về 'không có gì thay đổi' không? Rõ ràng DateTime là một kiểu trường khác với ngày tháng, đúng không? :) – rfunduk

0

Bạn có thể sử dụng nó với giờ học.

Rails như vậy là tốt với Api cho điện thoại di động (chẳng hạn như Android), khi bạn gửi ngày từ điện thoại di động để API như: 1482723520. (last_created = 1482723520)

Bạn có thể sử dụng nó như thế:

time = Time.at(params[:last_created].to_i) 

và trong Rails bạn có thể truy vấn như thế:

Number.where(created_at: { :$gte => time })