MongoDB возвращает значения идентификаторов объектов, отличные от сохраненных (с использованием GridFS)

#java #mongodb #gridfs

#java #mongodb #сетки #gridfs

Вопрос:

Я сохраняю файлы в MongoDB. Чтобы получить их позже, я записываю ObjectId данные, связанные с каждым файлом.

 GridFS fs = new GridFS(Dao.getDB(), "docs");
GridFSInputFile file = fs.createFile(fAsIS);
ObjectId id = (ObjectId)file.get("_id");
file = fs.createFile(fAsIS);  //fAsIS is an InputStream
file.save();
  

Однако возвращаемое значение id всегда отличается от того, что сохраняется.

Например. когда:

сохраняется 4e9845d6036400df09609b23 возвращаемое значение равно 4e9845d6036400df09609b22 сохраняется 4e98466f036400df09609b27 возвращаемое значение равно 4e98466f036400df09609b26 сохраняется 4e9848530364904b6b575003 возвращаемое значение равно 4e9848530364904b6b575002

Разница заключается только в последней цифре, и разница неизменно одна и та же: возвращаемое значение на 1 меньше сохраненного значения.

Когда я запускаю свой тест с сохраненным значением, файл возвращается, как и ожидалось. Похоже, это проблема, которую я должен решить.

Кто-нибудь знает, почему это может происходить?

Комментарии:

1. На данный момент я решил эту проблему с помощью взлома. Я добавил 1 к возвращаемому значению, или в тех случаях, когда последняя цифра представляет собой алфавитные символы, я сдвинул символ на единицу. Но я все еще очень хочу знать, видел ли кто-нибудь это раньше или, возможно, знает, почему это происходит.

Ответ №1:

Вероятно, потому, что вы вызываете fs.createFile(fAsIs) дважды