*
  Мысли   Галерея   Проекты   Тексты  
  Мысли   Галерея   Проекты   Тексты  
Giver: BinData в MongoDB  (2012-03-26 10:00:49)

Удивительное дело обнаружилось при работе с MongoDB. При вставке бинарных данных и попытке их отсортировать получался совершенно рандомный порядок. Что же делать, пришлось открыть исходный код и удивиться:

   case BinData: {
            int lsz = l.objsize(); // our bin data size in bytes, not including the subtype byte
            int rsz = r.objsize();
            if ( lsz - rsz != 0 ) return lsz - rsz;
            return memcmp(l.value()+4, r.value()+4, lsz+1);
        }

То есть записи сортируются сначала по размеру, а только потом по содержанию, и набор данных [11,2,333] будет отсортирован как [2,11,333]. Так что монго сортирует любые наборы бинарных данных как числа, а не как строки и нет никакого способа поменять это поведение. Так и живем, приходится выравнивать все бинарные записи по одной длине.


Имя:
Комментарий: