Мои объекты имеют следующую структуру:Как рисовать и группировать в MongoDB?
{id: 1234, ownerId: 1, typeId: 3456, date:...}
{id: 1235, ownerId: 1, typeId: 3456, date:...}
{id: 1236, ownerId: 1, typeId: 12, date:...}
Я хотел бы запросить базу данных таким образом, что он возвращает все элементы, которые принадлежат к данному ownerId
, но только первый пункт данного typeId
. IE поле typeId
уникально в результатах. Я также хотел бы иметь возможность использовать skip
и limit
.
В SQL запрос будет что-то вроде:
SELECT * FROM table WHERE ownerId=1 SORT BY date GROUP BY typeId LIMIT 10 OFFSET 300
настоящее время у меня следующий запрос (с использованием PyMongo), но это дает мои ошибки для использования $sort
, $limit
и $skip
:
search_dict['ownerId'] = 1
search_dict['$sort'] = {'date': -1}
search_dict['$limit'] = 10
search_dict['$skip'] = 200
collectionName.group(['typeId'], search_dict, {'list': []}, 'function(obj, prev) {prev.list.push(obj)}')
-
Я также пробовал агрегацию ro но я понимаю, что группировка коснется всех элементов коллекции, сгруппирует их, а затем ограничит и пропустит. Это будет слишком дорогостоящим и медленным. Мне нужен итеративный алгоритм группировки.
search_dict = {'ownerId':1}
collectionName.aggregate([
{
'$match': search_dict
},
{
'$sort': {'date': -1}
},
{
'$group': {'_id': "$typeId"}
},
{
'$skip': skip
},
{
'$limit': 10
}
])
** Вопрос должен показать ваши усилия, чтобы решить проблему самостоятельно. **;) После этого я с радостью ответю. –
Посмотрите на агрегат мангуста, попробуйте и вернитесь к нам :) –
@RichardMacarthy: Почему мангуста? Довольно бесполезно, если OP - это Pythonista или Coffee Cup (как и я), не так ли? –