Разница между _id и $ oid; $ date и IsoDate в базе данных mongo

Мы используем mongo db для хранения определенных записей в производственной базе данных.

Мы видим, что наши записи имеют "_id" : { "$oid" : "50585fbcb046b2709a534502"} в производственной базе данных, в то время как мы видим ту же запись, что и "_id" : ObjectId(" 50585fbcb046b2709a534502 ") в базе данных qa. Для дат мы видим "ld" : { "$date" : "2011-12-03T17:00:00Z"} в базе данных prod, а "ld" :ISODate("2011-12-03T17:00:00Z") в базе данных qa. Мы успешно протестировали наши запросы в среде qa, но опасаемся, что они могут не работать в производственной среде.

1) Будут ли мои java-запросы работать без проблем как на prod, так и на qa? (Я использую morphia apis для запроса) 2) Хранятся ли они внутри одинаково?


person Kumar Manish    schedule 26.09.2012    source источник
comment
К сведению всех, кто пытается получить простой JSON (например, {"$oid": x} вместо ObjectId(x) из клиента командной строки mongo: попробуйте вместо этого использовать mongoexport.   -  person rakslice    schedule 07.02.2015


Ответы (1)


Чтобы ответить на два вопроса:

  1. Да, они будут
  2. Да, они такие же, это просто представление в элементе, который вы просматриваете (консоль или приложение), о том, как они отображаются. Консоль (в любом случае более поздние версии, около 1.4+) будет отображать ObjectId и ISODate (обычно), тогда как выбор ее непосредственно с языка сервера (Java в вашем случае) будет, как правило, отображать полные свойства объектов ($oid и $date в этом случае).
person Sammaye    schedule 26.09.2012
comment
Значит, это не связано ни с какой версией драйвера и т. Д.? На самом деле это цифры, потому что в prod мы используем инструмент для просмотра данных, а в qa мы используем командную строку для просмотра вставленных данных. - person Kumar Manish; 26.09.2012
comment
@KumarManish нет, все версии драйверов должны быть согласованы на этом фронте, да, инструмент просто захватывает данные в полном простом формате (или даже переводит их со своей стороны, чтобы они выглядели так), тогда как консоль переводит все объекты в вашем док. - person Sammaye; 26.09.2012
comment
Я только что проверил, как кто-то вручную входил в производственную базу данных, и я увидел, что версии qa и prod были показаны точно так же. - person Kumar Manish; 30.09.2012
comment
На самом деле я обнаружил случай, когда 2 объекта в одной среде с одним и тем же драйвером возвращают 2 разных значения с одной и той же версией драйвера Java (3.3.0) на одном компьютере. Теперь мое приложение не работает из-за этого. stackoverflow.com/questions/39603179 / - person juminoz; 21.09.2016