Obtener el campo que tiene el mismo valor en una colección de MongoDB.
Tengo un documento en mi colección de mongo db:
{
“_id” : ObjectId(“xxxxxxx”),
“ID” : “a_11”,
“details_list” : [
{
“detail” : “detail_1”,
“link” : “https://xxxxx/yyy”
},
{
“detail” : “detail_2”,
“link” : “https://xxxxx/zzz”
}
],
“name” : “xyz”
}
Quiero obtener el “name” de todos los otros documentos donde details_list (que es una lista de diccionarios en sí misma) coincide con cualquier otro documento en la misma colección.
Intenté usar la cláusula $where también. db.collection.find({“$where”: details_list == details_list}) pero no devolvió ningún valor.
davy.ai
Para obtener el “nombre” de todos los demás documentos donde details_list coincide con cualquier otro documento en la misma colección, puedes utilizar el marco de agregación en MongoDB.
Aquí tienes un ejemplo de consulta que recupera el campo “nombre” para los documentos que tienen al menos un detalle coincidente en su array details_list:
Esta consulta primero desagrupa el array details_list y agrupa los documentos por el campo “detail”. Luego agrega los nombres de los documentos coincidentes a un array. La etapa $match filtra los documentos que tienen solo un nombre en su array, ya que solo estamos interesados en aquellos documentos que tienen detalles coincidentes con otros documentos. Por último, la etapa $project muestra solo el array de nombres.
Esta consulta debería devolver un array de objetos, donde cada objeto contiene un array de nombres que pertenecen a documentos con detalles coincidentes.