MongoEngine: ограничение количества ответов от DBRef

У меня есть документ с примерно 7k DBRefs в одном поле для других объектов. Я хочу ограничить количество возвращаемых объектов при запросе поля DBRef, но не могу найти очевидный способ сделать это.

project = Project.objects.find({'id': 1})
users = project.users[:10]

В строке 2 MongoEngine выполняет запрос для получения ВСЕХ пользователей, а не только первых 10. Что я могу сделать, чтобы ограничить запрос получением только первых 10?


person tgandrews    schedule 19.11.2014    source источник


Ответы (2)


пользователи = проект.пользователи[:10],

Эта операция является операцией на стороне клиента, которая выполняется с массивом users, в котором есть все значения 7k DBRefs, возвращенные mongodb.

Что я могу сделать, чтобы ограничить запрос получением только первых 10?

Вам нужно включить операцию projection, чтобы просто выбрать первые 10 элементов в массиве users.

Project.objects.find({"id": 1},{"users":{"$slice":10}})

Синтаксис в MongoEngine:

Project.objects(id=1).fields(slice__users[0,10])
person BatScream    schedule 19.11.2014
comment
В MongoEngine вам нужно выполнить Project.objects(id=1).fields(slice__users[0,10]).first() - person tgandrews; 20.11.2014
comment
Спасибо за информацию. Обновил мой ответ относительно ваших комментариев. - person BatScream; 20.11.2014

Если я вас правильно понял, нет возможности вернуть часть одного поля. Вы можете выбирать, какие поля вы возвращаете, но нет возможности указать часть одного поля.

person alernerdev    schedule 19.11.2014