Lo anterior es la estructura de mis datos en MongoDB Store. Digamos que estoy consultando de la siguiente manera
{'symbol_alerts.[CHANNEL_ID_STRING].usdt_alerts: {$exists: true}}
Quiero hacer coincidir dinámicamente todos los CHANNEL_ID_STRINGS dentro de la ruta symbol_alerts , para poder consultar la existencia de usdt_subs dentro de todos los canales. ¿Alguna idea de cómo puedo hacer coincidir todos los CHANNEL_ID_STRING independientemente de su valor?
Solución #1:
var CHANNEL_ID_STRING = "abc" var condition = {} condition[`symbol_alerts.${CHANNEL_ID_STRING}.usdt_alerts`] = { $exists: true }; db.dynamicKeys.find(condition);Solución #2 basada en esta respuesta :
let CHANNEL_ID_STRING = "abc"; db.dynamicKeys.aggregate([ { $project: { dynamicKeys: { $objectToArray: "$symbol_alerts" } } }, { $match: { "dynamicKeys": { $elemMatch: { k: CHANNEL_ID_STRING, "v.usdt_alerts": { $exists: true } } } } }, { $project: { "symbol_alerts": { $arrayToObject: "$dynamicKeys" } } } ]);Y así es como se ve mi colección de muestras:
/* 1 createdAt:2/24/2021, 8:08:54 PM*/ { "_id" : ObjectId("603664fe24f3423874ac9534"), "symbol_alerts" : { "jkl" : { "other_key" : { "key1" : "value1" } }, "mno" : { "usdt_alerts" : { "key1" : "value1" } } } }, /* 2 createdAt:2/24/2021, 8:08:54 PM*/ { "_id" : ObjectId("603664fe24f3423874ac9533"), "symbol_alerts" : { "abc" : { "usdt_alerts" : { "key1" : "value1" } }, "def" : { "other_key" : { "key1" : "value1" } }, "ghi" : { "usdt_alerts" : { "key1" : "value1" } } } }