MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sự khác biệt giữa Date.now () và Date.now trong mongoose là gì?

Tôi biết đây là một câu hỏi cũ, nhưng câu trả lời được chấp nhận không giải thích sự khác biệt một cách chính xác. Nó giải thích sự khác biệt trong hành vi, nhưng không giải thích cách nó thực sự hoạt động.

Trong mongoose của bạn lược đồ, default của bạn có thể là một giá trị của kiểu được chỉ định hoặc một hàm trả về giá trị của kiểu được chỉ định. Date.now là một hàm Javascript được tích hợp sẵn trả về dấu thời gian unix hiện tại dưới dạng một số.

Nếu bạn vượt qua Date.now làm default trong mongoose của bạn schema, bạn đang chuyển hàm và mongoose sẽ gọi hàm đó mỗi khi tài liệu cần giá trị mặc định cho thuộc tính đó. Điều này dẫn đến thời gian hiện tại, tại thời điểm tài liệu sự sáng tạo , được lưu trữ dưới dạng giá trị cho thuộc tính đó.

Tuy nhiên, nếu bạn vượt qua Date.now() thay vào đó, bạn đang chuyển giá trị được trả về bởi Date.now() chứ không phải là chức năng. Bằng cách làm này, tài liệu của bạn sẽ nhận được thời gian hiện tại, tại thời điểm của giản đồ sự sáng tạo , làm giá trị mặc định cho thuộc tính đó. Điều này có nghĩa là tài liệu của bạn sẽ lưu trữ thời gian triển khai mới nhất, điều này có thể không phải là điều bạn muốn.

Nếu Date.now là một hằng số "được thay thế bởi Mongoose bằng ngày giờ hiện tại khi tạo bản ghi mới", như được đề xuất bởi câu trả lời được chấp nhận, thì điều sau sẽ hoạt động một cách hợp lý:

validUntil: {
  type: Date,
  default: Date.now + 3*60*60*1000 // 3 hours from now
}

Nhưng Date.now không được thay thế một cách kỳ diệu bởi mongoose , đó là một hàm và bạn không thể thêm một số vào một hàm. Tuy nhiên, bạn có thể gọi một hàm bên trong hàm của riêng mình và thêm một số vào kết quả, như được minh họa bên dưới:

validUntil: {
  type: Date,
  default: () => Date.now() + 3*60*60*1000 // 3 hours from now
}

Vì không rõ ràng từ câu trả lời được chấp nhận rằng Date.now là một hàm chứ không phải mongoose không đổi, tôi muốn làm rõ điều đó. Sự khác biệt giữa Date.now()Date.now đó có phải là Date.now() không gọi hàm và trả về kết quả, trong khi Date.now trả về chính hàm.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể truy xuất giá trị _id bằng mgo với golang

  2. Làm cách nào để xóa _id trong MongoDB và thay thế bằng một trường khác làm Khóa chính?

  3. Mongodb không thể tìm thấy đối tượng có _id quá dài

  4. Lưu trữ và truy xuất các đối tượng JavaScript trong / từ MongoDB

  5. MongoDB $ thêm