Я считаю количество похожих значений в документе MongoDB следующего типа.
{
"_id" : ObjectId("5b7fa2a745d12b10324d3a01"),
"date_time" : "24, Aug 2018 11:44",
"original_query" : "sanjeevnewar",
"posts" : [
{
"full_story" : "https://m.facebook.com//story.php?story_fbid=10156903788391742&id=590746741&refid=17",
"love" : {
"total" : "1",
"reactors" : [
{
"profile" : "https://m.facebook.com//amrit2100",
"name" : "Amrit Kumar Deb",
"fb_id" : "100002204201460"
}
]
},
"like" : {
"total" : "65",
"reactors" : [
{
"profile" : "https://m.facebook.com//profile.php?id=100026633915502",
"name" : "Kamlesh Yadav",
"fb_id" : "100026633915502"
},
}
]
},
Это соответствует нескольким подобным записям для разных fb_ids.
И моя реализация -
result = db.post.find()
list_of_reactor_ids = []
Я использовал Счетчик для накопительного обновления значений
dict_of_reactor_ids = Counter()
sorted_dict_of_reactor_ids = {}
okey={}
for doc in result:
for post in doc['posts']:
if 'like' in post:
value = 1
Я добавляю соответствующие fb_ids с их значениями, а затем сортирую их
for reactor in post['like']['reactors']:
dict_of_reactor_ids.update({reactor['fb_id']: value})
sorted_dict_of_reactor_ids = sorted(dict_of_reactor_ids.items(),
key=lambda dict_of_reactor_ids: dict_of_reactor_ids[1], reverse=True)
if 'fb_id' in doc:
okey.update({doc['fb_id']: sorted_dict_of_reactor_ids})
pprint.pprint(okey)
Я получаю вывод, но пары значений ключа не соответствуют фактическим парам значений ключа, некоторые являются действительными, а некоторые из других записей значения ключа, например, 2-е значение в следующем выводе фактически соответствует другому ключу, но его там присутствует в первой записи.
Выдержка из вывода, который я получаю -
{'100000107208292': [('100013453489456', 16),
('100009112778707', 14),
('100011123838353', 14),
'100000990054613': [('100013633776676', 7),
('100010228383344', 7),
('100010068034206', 7),
('100013210631871', 6),
('100014734173448', 5),
('100011640376115', 4)
]
}