2011-10-31 33 views
7

Tôi đã sử dụng node-mongoskin để kết nối hai thiết bị này. Mọi thứ đều ổn cho đến khi tôi truy vấn một số trường "ngày" mà tôi cho rằng nên được trả về dưới dạng đối tượng javascript′s Date. Nhưng loại kết quả là chuỗi, đó là lẻ (đối với tôi) và bất tiện.MongoDB + Node.js: không thể chèn ngày đúng

Chèn trông giống như sau:

var doc = { 
    date: new Date(), 
    info: 'Some info' 
} 
db.users.insert(doc, {safe: true}, function(err, res) { 
    ... 
}); 

Và kết quả của việc trên là (không _id lĩnh vực):

{ "date" : "Mon Oct 24 2011 18:00:57 GMT+0400 (MSK)", "info": "Some info" } 

Tuy nhiên, chèn với MongoDB Shell làm việc tốt, ngoại trừ loại trường là ISODate

> db.things.insert({ date: new Date() }); db.things.find(); 
{ "_id" : ObjectId("4eae9f2a34067b92db8deb40"), "date" : ISODate("2011-10-31T13:14:18.947Z") } 

Vì vậy, câu hỏi đặt ra là: cách sh Tôi có thể chèn tài liệu vào các trường ngày truy vấn là đối tượng Date không? Những gì tôi muốn là thiết lập các lĩnh vực trên cơ sở dữ liệu-phía máy chủ. Tôi chỉ cần gửi một cái gì đó như null-lĩnh vực, và db-server thiết lập những người cho tôi bằng cách sử dụng mặc định cơ chế mongo′s.

Chèn dấu thời gian (như native MongoDB timestamp) cũng là một vấn đề, nhưng nó không phải là một vấn đề lớn như vậy.

PS: Không may mắn qua mongoskin và mongodb-native tài liệu.

+0

Tôi nghĩ rằng, vấn đề ngày đã biến mất với bản cập nhật (không chắc chắn ai có: driver của mongo). Vẫn tự hỏi cách chèn dấu thời gian chính xác. – elmigranto

Trả lời

0

ISODate là cách gốc để mongo lưu trữ ngày. Tôi sử dụng module npm node-mongodb-native và tôi lưu/lấy javascript Date bằng cách sử dụng thành phần Date() mới như trong ví dụ của bạn. Tôi không biết nếu đó là một sửa chữa gần đây bởi vì tôi bắt đầu nút và Mongo vào năm 2012, nhưng sử dụng ngày khá đơn giản đối với tôi.

0

mã JavaScript:

collection.insert({"className"  : "models.Action", 
         "title"   : "Email", 
         "description" : "How are you today?", 
         "creationDate" : new Date("Fry, 4 May 2012 10:30:08 +0200 (CEST)"), 
         "creator"  : dbref }, 

sản xuất trong MongoDB

db.action.find({"title":"Email"}) 
> db.action.find({"title":"Email"}) 
{ "className" : "models.Action", "title" : "Email", "description" : "How are you today?", "creationDate" : ISODate("2012-05-04T08:30:08Z"), "creator" : { "$ref" : "person", "$id" : ObjectId("4f995e4824ac8d68f63adf69") }, "_id" : ObjectId("4fa79e2e92c2a19a09000002") } 
+0

Cảm ơn. Nhưng như tôi đã lưu ý trong câu hỏi bình luận, ngày chèn là ok. Nhưng cách chèn dấu thời gian (theo định dạng [mongodb] (http://www.mongodb.org/display/DOCS/Timestamp+data+type)). Tôi đoán nó có thể được thực hiện với 'collection.insert ({ts: new mongoskin.Timestamp()})'. – elmigranto

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