Tengo una colección configurada en mongoDB con ejemplos de comentarios realizados por usuarios de una plataforma de redes sociales inventada, de esta forma:
{ "_id" : ObjectId("5aa58936c4214f42f4c666b8"), "id" : "85", "user_name": "Alex4Ever", "text" : "This is a comment", "in_reply_to_user_name": "SamLad" }, { "_id" : ObjectId("5aa58935c4214f42f4c66608"), "id" : "86", "user_name": "SamLad", "text" : "I am inevitable", "in_reply_to_user_name": null }, { "_id" : ObjectId("5aa588e4c4214f42f4c63caa"), "id" : "87", "user_name": "HewwoKitty", "text" : "What is grief, if not love persevering?", "in_reply_to_user_name": "Alex4Ever" } //There are more, but for testing purposes, I only use these 3 for now.Tengo que generar una consulta en MongoDB para enumerar todos los usuarios en el archivo junto con la cantidad de respuestas que recibieron. Entonces, en el bit de archivo de muestra anterior, la salida debería ser como:
"_id": "Alex4Ever", "replyCount" : 1, //HewwoKitty replied to Alex4Ever "_id": "SamLad", "replyCount" : 1, //Alex4Ever replied to SamLad "_id": "HewwoKitty", "replyCount" : 0, //No one replied to HewwoKittyMi intento de hacer esto:
db.comments.aggregate([ {$match:{"in_reply_to_user_name":{"$exists":true, "$ne":null}}}, {$group: { _id: "$in_reply_to_user_name", replyCount:{$sum: 1}}}, {$sort:{replyCount: -1}} ]).pretty() Sin embargo, solo obtengo los valores distintos de cero, es decir, no obtengo HewwoKitty con un número de replyCount de 0 . ¿Hay alguna forma de imprimir las 3 líneas, incluidas las líneas con 0 respuestas?
Demostración - https://mongoplayground.net/p/JA9YasEYuVV
Use $búsqueda y cree una autounión para obtener todas las respuestas de un usuario y use $tamaño para obtener el recuento de respuestas, luego $ agrúpelas en nombre_usuario.
Extrae el número de respuestas, toma $primer valor del grupo
db.collection.aggregate([ { "$match": { "in_reply_to_user_name": { "$exists": true } } }, { "$lookup": { "from": "collection", "localField": "user_name", "foreignField": "in_reply_to_user_name", "as": "replies" } }, { "$project": { "user_name": 1, "replyCount": { "$size": "$replies" } } }, { "$group": { "_id": "$user_name", "replyCount": { "$first": "$replyCount" } } } ])