2014-12-15 17 views
10

tôi đang chèn tài liệu thông qua truy vấn sau đây:ngày Chèn() để MongoDB qua Mongo shell

db.collection.insert( 
{ 
     date: Date('Dec 12, 2014 14:12:00') 
}) 

Nhưng nó sẽ mang lại cho tôi lỗi. tôi phải chèn ngày trong bộ sưu tập của tôi làm thế nào tôi có thể sửa nó.?

+2

Lỗi gì? [Chỉnh sửa câu hỏi của bạn] (https://stackoverflow.com/posts/27480134/edit) và thêm thông báo lỗi. –

+0

Câu hỏi này nêu rõ trong trình bao, và tất cả các câu trả lời đã cho là dành cho javascript. Vui lòng đăng câu trả lời để chèn từ bảng điều khiển mongo. –

Trả lời

11

Bạn phải nhận được lỗi khác vì mã ở trên sẽ dẫn đến phương thức Date() trả về ngày hiện tại dưới dạng chuỗi, bất kể đối số được cung cấp với đối tượng. Từ các đối tượng Ngày documentation: JavaScript ngày chỉ có thể được khởi tạo bằng cách gọi JavaScript Date làm hàm tạo: gọi nó là hàm bình thường (nghĩa là không có toán tử new) sẽ trả về chuỗi thay vì đối tượng Date; không giống như các loại đối tượng JavaScript khác, các đối tượng Ngày JavaScript không có cú pháp chữ.

Bạn có thể muốn thử loại này thay vì để có được những ngày tháng chính xác, mang trong tâm trí rằng tham số tháng constructor Ngày Javascript là 0-based:

đối tượng
var myDate = new Date(2014, 11, 12, 14, 12); 
db.collection.insert({ "date": myDate }); 
+0

Tham chiếu đẹp. Nhưng không hoàn toàn "thực sự" ở đó cách mà hàm tạo ngày 'Date' hoạt động và các yêu cầu cho MongoDB. –

+0

Cảm ơn bạn đã sửa, ban đầu tôi nghĩ từ [tài liệu shell MongoDB] (http://docs.mongodb.org/manual/core/shell-types/) phương thức Date() trả về ngày hiện tại dưới dạng một chuỗi như đã nêu ở trên và cách các đối tượng Date dẫn đến một phạm vi ngày có thể đại diện khoảng 290 triệu năm trước và trong tương lai, nhưng chưa bao giờ hiểu được cách các tham số của hàm tạo ngày 'Date' khác với MongoDB. Chúc mừng cho sự khai sáng. – chridam

+0

JavaScript 'Date' thực hiện điều tương tự như' ISODate() 'cho shell mong đợi. 'ISODate()' chỉ nghiêm ngặt hơn trong biểu diễn thành ** chỉ ** chấp nhận một chuỗi có thể dẫn đến cấu trúc UTC. Đó là sự khác biệt. –

11

ngày JavaScript có thể là một điều buồn cười. Tùy thuộc vào cách bạn thực sự cung cấp các đối số để khởi tạo chúng, bạn sẽ nhận được các kết quả khác nhau.

Ví dụ, một số có thể đề nghị bạn thử này:

var myDate = new Date(2014, 11, 12, 14, 12) 

Mà dường như tốt, nhưng có một vấn đề.

Bạn thấy rằng một số hình thức khởi tạo đối tượng Date trong JavaScript sử dụng múi giờ "cục bộ" khi tạo ngày. Những người khác sử dụng múi giờ UTC hoặc "phổ quát" cho một tiêu chuẩn đã đặt. Đây cũng là "chuẩn" mà MongoDB mong đợi, và thường được chấp nhận là thực hành tốt nhất cho ứng dụng của bạn để lưu trữ các ngày theo cách này. Thực hiện bất kỳ chuyển đổi nào trong mã của bạn, cách xa kho dữ liệu. Điều này đảm bảo bạn có thể xử lý nhiều ngôn ngữ mà không gặp vấn đề gì.

Vì vậy, những gì bạn nên làm là thế này:

var date = new Date("2014-12-11T14:12:00Z") 

Ngoài ra còn có một "trợ giúp" trong vỏ MongoDB để xử lý này khá nhiều trong cùng một cách, nhưng cụ thể hơn đối với cú pháp:

var date = new ISODate("2014-12-11T14:12:00Z") 

Điều này tạo ra giá trị ngày UTC lưu trữ chính xác như mong đợi. Bạn nên luôn luôn đối phó với UTC khi lưu trữ ngày trong MongoDB.

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