Мы недавно обновили наше приложение до Rails3, и теперь мы используем Mongoid, и у нас возникла проблема с получением предыдущих документов из mongo-db на _id
.
При более тщательном изучении старая запись (которую я не могу извлечь по _id
) выглядит следующим образом:
#<Audit::Log _id: 4d892bfe6bcaff4ffd000001,
failed: nil, request_id: "68ccb38e9e345bb7fc55331389a902a1",
session_id: "54940ff7e8c7336d813a872db7cb7bc0",
_id: "4d892bfe6bcaff4ffd000001", ... }>
и хорошая запись имеет следующую структуру:
#<Audit::Log _id: 4d892bfe6bcaff4ffd000001,
failed: nil, request_id: "68ccb38e9e345bb7fc55331389a902a1",
session_id: "54940ff7e8c7336d813a872db7cb7bc0",
_id: BSON::ObjectId('4d892bfe6bcaff4ffd000001'), ... }>
Как видите, поле _id
отличается. Для старых записей это, кажется, просто строка, а для новых записей это BSON::ObjectID
.
Кажется, я не могу получить записи в старом формате. Попытка найти записи, используя
Audit::Log.where(:_id => BSON::ObjectId('4d892bfe6bcaff4ffd000001')).first
Audit::Log.where(:_id => '4d892bfe6bcaff4ffd000001').first
оба возвращают nil
.
Но для хорошей записи я могу просто сделать
Audit::Log.where(:'_id' => '4e14152d6bcaff26bb000039').first
Я предполагаю, но, возможно, Mongoid автоматически преобразует строку в ObjectId
для поиска по _id
? Единственное исправление, которое я вижу, это преобразовать
все поля _id
до BSON::ObjectId
, если их еще нет. Но как мне это сделать?
Или у вас есть лучший подход?