Почему мы когда created_at
поле, когда timestamp
можно найти в первых 4 байтах ObjectId
Почему мы должны created_at в MongoDB
ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
Взятый из MongoDB Docs
Почему мы когда created_at
поле, когда timestamp
можно найти в первых 4 байтах ObjectId
Почему мы должны created_at в MongoDB
ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
Взятый из MongoDB Docs
Как вы сказали, как она четко сказано в documentation:
с _ID ObjectId по умолчанию сохраняет 4 байта метки времени, в большинстве случаев вы не требуется для хранения времени создания любого документа.
И вы можете использовать ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
, чтобы получить дату создания в формате даты ISO.
Также заказчику (нам) необходимо также иметь такую услугу, поскольку это делает нашу попытку получить дату создания и выполнить действия на нем гораздо более интуитивно и легко.
Но имейте в виду, что некоторые фреймворки генерируют ObjectId по-разному. Например: «Метеорные состояния». Значения «ObjectID», созданные Meteor, не будут иметь значимых ответов на их метод getTimestamp, поскольку Meteor в настоящее время их полностью создает ». http://docs.meteor.com/api/collections.html#Mongo-ObjectID – Gwened
Есть несколько случаев, когда это имеет смысл сделать так:
Когда вам нужно лучше точность - ObjectId.getTimestamp()
точен до секунды, в то время как Date
поля магазина миллисекунды. Сравните это с mongo
оболочкой: new Date()
дает ISODate("2016-01-03T21:21:38.032Z")
, а ObjectId().getTimestamp()
- ISODate("2016-01-03T21:21:50Z")
.
Когда вы не используете ObjectId
вообще - это часто воспринимается как само собой разумеющееся, что _id
поле должны быть заполнены ObjectId
, в то время как на самом деле ObjectId
только по умолчанию используется большинством водителей и MongoDB itself doesn't impose it - на напротив, рекомендуется использовать любой «естественный» уникальный идентификатор, если он существует для документов. В этом случае, хотя вам придется хранить «временную метку создания» самостоятельно, если вам это нужно.
Удобство использования - если вы полагаетесь на присутствие этого поля и данных в нем, возможно, было бы лучше, по крайней мере, с точки зрения дизайна, быть явным. Это скорее вопрос вкуса. Однако, как отмечено в комментариях, если вы также хотите фильтровать или сортировать по «временной отметке создания», то будет проще сделать выделенное поле для него и использовать операторы запросов, например, $gt
, например, непосредственно на нем.
Нам это не нужно. Но реальное поле даты облегчает фактическое извлечение/манипулирование меткой времени (нет необходимости ее преобразовывать), но, особенно, я думаю, гораздо легче фильтровать ее при запросе документов. – bardzusny
Если бы вы ответили, я бы определенно согласился с этим. – Eduard
Следует также отметить, что в операторах запросов для метки времени в _id все еще не существует, и не все драйверы обеспечивают достойный помощник для создания основанных на времени _ids – Sammaye