{ 'id' : 1, 'properties':{ 'type': [[0.05, 'education'],[0.6, 'health'],[0.9, 'math']] } }, { 'id' : 1, 'properties':{ 'type': [[0.05, 'education'],[0.01, 'health'],[0.9, 'math']] } }, ¿Cómo podría consultar en función de dos parámetros de valor en una matriz anidada de matrices? El objetivo sería devolver el primer documento con properties.type[0] > 0.5 y properties.type[1] == 'health' .
He intentado la siguiente consulta sin suerte.
db.collection.find({'properties.type': {'$elemMatch':{'$elemMatch':{'$all': [{ "$gt": 0.5, "$lt": 1 },'health']}}}})Aquí, intente esto, uso $unwind y $arrayElemAt .
db.collection.aggregate([ { $unwind: "$properties.type" }, { $match: { "$and": [ { "$expr": { "$gt": [ { $arrayElemAt: [ "$properties.type", 0 ] }, 0.5 ] } }, { "$expr": { "$eq": [ { $arrayElemAt: [ "$properties.type", 1 ] }, "health" ] } } ], } }, { $limit: 1 } ])Actualizado
db.collection.aggregate([ { "$addFields": { "orignalObj": "$$ROOT" } }, { $unwind: "$properties.type" }, { $match: { "$and": [ { "$expr": { "$gt": [ { $arrayElemAt: [ "$properties.type", 0 ] }, 0.5 ] } }, { "$expr": { "$eq": [ { $arrayElemAt: [ "$properties.type", 1 ] }, "health" ] } } ], } }, { $limit: 1 }, { $replaceRoot: { newRoot: "$orignalObj" } } ])