Tengo el siguiente documento con una matriz (nombres gists ). Ejemplo de un documento:
{ "_id": ObjectId("60a2c0621e5f043b735e36ef"), "car_id": 78, "terminal": "JFK", "gists": [ "A", "M", "C", "D", "Q", "J", "F" ] }, Mi objetivo es consultar todos los documentos que tienen una "A" duplicada y obtener su car_id .
Si bien puedo encontrar duplicados, no pude obtener los resultados de "A" en gists .
db.collection.aggregate([ { "$project": { "gists": 1 } }, { "$unwind": "$gists" }, { "$group": { "_id": { "_id": "$_id", "cid": "$gists" }, "count": { "$sum": 1 } } }, { "$match": { "$and": [ { "count": { "$gt": 1 } }, { "gists": "A" **//<---- this is where I get it off. Gist must contain A in the array** } ] } }, { "$group": { "_id": "$_id._id", "gists": { "$addToSet": "$_id.cid" } } } ])Puede probar el operador de expresión $expr con operadores de agregación,
$filter para iterar el ciclo de la matriz gists y verificar el valor "A"$size para obtener el total de elementos del resultado filtrado anterior$gt para comprobar que el tamaño anterior es mayor que 1$group por nulo y construir la matriz de car_id db.collection.aggregate([ { $match: { $expr: { $gt: [ { $size: { $filter: { input: "$gists", cond: { $eq: ["$$this", "A"] } } } }, 1 ] } } }, { $group: { _id: null, car_id: { $push: "$car_id" } } } ])Resultado:
[ { "_id": null, "car_id": [79, 80] } ]