Tengo un documento en MongoDB que tiene una matriz multidimensional como se muestra a continuación.
{"_id":1, "name":"Johnson", "card":[ ["",12,25,"","",52,60,"",86], [1,17,29,"",43,"","","",89], [3,"","",34,45,"",62,70,""] ] } Estoy buscando una consulta que devuelva el índice de un elemento particular en la matriz, por ejemplo, digamos 29 cuyo índice es [1][2] pero cuando consulté como:
> db.test.aggregate([{$project:{index:{$indexOfArray:["$card",29]}}}])obtuve el resultado como:
{ "_id" : 1, "index" : -1 }lo cual no es cierto Descubrí que este método de consulta solo funciona para una matriz unidimensional y no puedo averiguar cómo encontrar el índice de una matriz multidimensional en MongoDB. Cualquier ayuda será apreciada. Gracias
No está exactamente claro qué tipo de datos es [1][2], por lo que generar el resultado deseado es un desafío. Aquí hay un intento de ayudar a su pregunta ...
Datos de prueba
db.collection.insert( { "name":"Johnson", "card":[ ["", 12, 25, "", "", 52, 60, "", 86], [1, 17, 29, "", 43, "", "", "", 89], [3, "", "", 34, 45, "", 62, 70, ""] ] }(Asume un valor codificado de forma rígida de 29 para buscar)
Agregar
EDITAR 2021-12-09 - AÑADIDO $proyecto PARA CAST RESULTS COMO INTEGER. ERA NúmeroLargo()
db.collection.aggregate([ { $unwind: { path: "$card", includeArrayIndex: "outerIndex" } }, { $unwind: { path: "$card", includeArrayIndex: "innerIndex" } }, { $match: { "card": 29 } }, { $project: { name: 1, card: 1, outerIndex: { $convert: { input: "$outerIndex", to: "int" } }, innerIndex: { $convert: { input: "$innerIndex", to: "int" } } } } ])Resultados
[ { _id: ObjectId("61b13476c6c466d7d1ea9b5e"), name: 'Johnson', card: 29, outerIndex: 1, innerIndex: 2 } ] Los campos no deseados se pueden suprimir con otra etapa de $project , pero no la incluí aquí porque no tenía claro el resultado deseado.