Mongodb, aggregate, как подавить _id, но сохранить содержимое внутри него?

Нужна помощь с форматом вывода MongoDB Aggregate.

Моя запись данных включает что-то похожее на это:

 {'parent_id': '133', 'status_id': '209101162445115_1199071210114767', 'author_id': '10209422198664172', 'comment_published': '2016-08-15 08:57:09'}

Мне нужно подсчитать количество вхождений author_id, учитывая соответствующий parent_id. Я сделал это с aggregate:

m = collection.aggregate([{"$match": {"parent_id":"437325203079413_1543639"}},
{ "$group": {"_id": {"author_id": "$author_id"}, "count":{"$sum":1}}},
{"$project": {"_id":1, "count":1}} ]) #this line does not make any difference in the output.

page =[]
for i in m:
    page.append(i)
print(page)

Выходные данные выглядят следующим образом:

[{'_id': {'author_id': '10155430875324466'}, 'count': 1}, 
{'_id':{'author_id': '1249853341715138'}, 'count': 2}, 
{'_id': {'author_id': '10153804689530108'}, 'count': 1}]

Я хочу, чтобы выход был в этом формате:

 [{'author_id': '10155430875324466', 'count': 1}, 
 {'author_id': '1249853341715138', 'count': 2}, 
 {'author_id': '10153804689530108', 'count': 1}]

Или это:

  [{'10155430875324466', 1}, 
 {'1249853341715138', : 2}, 
 {'10153804689530108', 1}]

Я знаю медленный способ сделать это в python, но я чувствую, что должны быть лучшие решения. Возможно ли это сделать в рамках самого агрегированного запроса? Может кто-нибудь посоветовать?

1 ответ

  1. Вы можете попробовать это. Вы можете использовать author_idв качестве группировки _idнепосредственно, а затем projectзначение в _idas author_idна заключительном этапе.

    db.collection.aggregate([
        { "$match" : { "parent_id" : "437325203079413_1543639" } }, 
        { "$group" : { "_id" : "$author_id", "count": { "$sum" : 1 } } }, 
        { "$project" : { "_id" : 0, "author_id" : "$_id", "count" : 1 } } 
    ]);
    

    или вы можете изменить заключительный $projectэтап, как показано ниже.

    db.collection.aggregate([
        { "$match" : { "parent_id" : "437325203079413_1543639" } }, 
        { "$group" : { "_id" : { "author_id": "$author_id"}, "count": { "$sum" : 1 } } }, 
        { "$project" : { "_id" : 0, "author_id" : "$_id.author_id", "count":1 } } 
    ]);