MongoDB Tengo un documento, necesito obtener un objeto, si locale.en , devolverá esa información si locale.fr ' entonces devolverá esa información
{ "locale": { "en": { "dashboard": { "DASHBOARD_TITLE": "Some title" } }, "fr": { "dashboard": { "DASHBOARD_TITLE": "Some title french" } }, "pr": { "dashboard": { "DASHBOARD_TITLE": "Some title portugues" } } } }¿Cómo consultar este objeto específico?
db.collectionName.find({locale.en})Puedes lograr esto usando agregación
Suponiendo que su objeto tiene una locale clave como esta
{ "_id": <Some Object Id>, "locale": { "en": { "dashboard": { "DASHBOARD_TITLE": "Some title" } }, "fr": { "dashboard": { "DASHBOARD_TITLE": "Some title french" } }, "pr": { "dashboard": { "DASHBOARD_TITLE": "Some title portugues" } } } }Entonces la agregación sería
[{ "$project": { "locale": { "$arrayToObject": { "$filter": { "input": { "$objectToArray": "$locale" }, "as": "el", "cond": { $eq: [ "$$el.k", "en" ] } } } } } }] Simplemente pase su configuración regional en la matriz $eq como segundo valor, he pasado en puede usar la variable aquí para crear la consulta
Zona de juegos: https://mongoplayground.net/p/7ZHIUx_j1GY
La respuesta a esta pregunta explica en detalle la proyección de MongoDB en propiedades anidadas específicas
Zona de juegos: https://mongoplayground.net/p/wuv4axIMzCc
Consulta dinámica: https://mongoplayground.net/p/5ouZif-MIry