Лучший способ сохранить дату / время в mongodb

132

Я видел использование строк, целых временных меток и объектов dontetime mongo.

Теги:
datetime
date

2 ответа

165
Лучший ответ

Лучший способ - сохранить собственный JavaScript Объекты Date, которые отображаются на Собственные объекты даты BSON.

> db.test.insert({date: ISODate()})
> db.test.insert({date: new Date()})
> db.test.find()
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:42.389Z") }
{ "_id" : ObjectId("..."), "date" : ISODate("2014-02-10T10:50:57.240Z") }

Нативный тип поддерживает целый ряд полезных методов из коробки, которые вы можете использовать, например, в ваших сокращениях на карте.

Если вам нужно, вы можете легко конвертировать Date объекты в и из временных меток Unix 1) используя метод getTime() и конструктор Date(milliseconds), соответственно.

1) Строго говоря, отметка времени Unix измеряется в секундах. Объект Date JavaScript измеряется в миллисекундах с эпохи Unix.

  • 9
    Как это будет храниться в БД? Как объект даты и времени Монго?
  • 2
    @Thilo: MongoDB не имеет специального объекта datetime, насколько я знаю. Он использует тип даты JavaScript, который хранится в форме BSON.
Показать ещё 7 комментариев
47

Одна дататепа уже находится в объекте _id, представляющем время вставки

Итак, если время вставки - это то, что вам нужно, оно уже есть:

Вход в оболочку mongodb

ubuntu@ip-10-0-1-223:~$ mongo 10.0.1.223
MongoDB shell version: 2.4.9
connecting to: 10.0.1.223/test

Создайте свою базу данных, вставив элементы

> db.penguins.insert({"penguin": "skipper"})
> db.penguins.insert({"penguin": "kowalski"})
> 

Позволяет сделать эту базу данных той, на которой мы сейчас находимся

> use penguins
switched to db penguins

Верните строки:

> db.penguins.find()
{ "_id" : ObjectId("5498da1bf83a61f58ef6c6d5"), "penguin" : "skipper" }
{ "_id" : ObjectId("5498da28f83a61f58ef6c6d6"), "penguin" : "kowalski" }

Получить каждую строку в yyyy-MM-dd HH: mm: ss format:

> db.penguins.find().forEach(function (doc){ d = doc._id.getTimestamp(); print(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds()) })
2014-12-23 3:4:41
2014-12-23 3:4:53

Если этот последний лайнер вас смущает, у меня есть пошаговое руководство о том, как это работает здесь: https://stackoverflow.com/questions/6452021/getting-timestamp-from-mongodb-id

Protip, MongoDB - лучшая БД, потому что MongoDB - это веб-масштаб: https://www.youtube.com/watch?v=b2F-DItXtZs

  • 16
    Но это отметка времени, когда документ был сохранен в БД, иногда вы хотите сохранить даты и время, не связанные с датой вставки.
  • 1
    Если ваша база данных очень быстрая и два документа хранятся в одну и ту же миллисекунду ... у этих документов одинаковый _id ?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню