Форум сайта python.su
Здравствуйте!
Для чего нужен dbref в mongoenigne ?
city = db.ReferenceField(City, required=True, dbref=True) city = db.ReferenceField(City, required=True)
Офлайн
dbref - Это тип из bson (pymongo), содержит имя коллекции + идентификатор
с mongoenigne не знаком, но могу предположить что без dbref, ссылки будут хранится в виде ObjectId - только идентификатор,
с dbref=True, будут хранится в виде DBRef, т.е. + имя коллекции.
без dbref можно работать если вы точно знаете в какой коллекции лежит документ, если это не фиксируется, либо возможные документы могут лежать в разных коллекциях, то необходимо dbref.
так же можно обойтись без dbref если все данные лежат в одной коллекции (но это не желательно для больших проектов)
Офлайн
Я уточню.
Нужно обходится без DBRef, если это позволяет система.
Предпочтительный и рекомендуемой способ для большинства систем - ручные ссылки на _id, получаемый перед началом операции с помощью ObjectId().
Офлайн
Lexanderв смысле вручную генерировать _id? почему он предпочтительный?
Предпочтительный и рекомендуемой способ для большинства систем - ручные ссылки на _id, получаемый перед началом операции с помощью ObjectId().
Офлайн
А он и так всегда вручную генерируется.
Некоторые библиотеки просто неявно вызывают ObjectId(), но смысл от этого не меняется.
Так написано в официальной документации.
Возможно, как-то связано с внутренними алгоритмами.
ЗЫ
Кроме указанного вами случая разных коллекций.
Офлайн
o7412369815963я подумал про идентификаторы вида: 1,2,3,'A','B','X',…
в смысле вручную генерировать _id? почему он предпочтительный?
LexanderСогласен с документацией, тут может быть плюс в том что идентификатор может создаваться не тем процессом который записывает документ, или вообще документ не будет записан.
Так написано в официальной документации.
Офлайн
o7412369815963Самое интересное, что так тоже можно делать. :)
я подумал про идентификаторы вида: 1,2,3,'A','B','X',…
Офлайн
LexanderЯ кстати тестировал скорость чтения на mongodb 1.6, нумератор (1,2,3…) vs objectID для _id. Дак с ObjectId почему то было быстрее на 20-30%.
Самое интересное, что так тоже можно делать. :)
Офлайн
Интересное поведение.
Как думаете, почему?
Офлайн
хз, может простые типы нужно было подготавливать перед помещением/поиском в индекс, например в хеш переводить. а ObjectID работает как есть.
считаю что сейчас это уже не актуально и нужно заново тестировать, т.к. монга сильно продвинулась.
Офлайн