I have next sample documents in MongoDB.
db={
"contracts": [
{
"bid": 1, // id in businesses collection
"type": "A",
"name": "N1"
},
{
"bid": 1,
"type": "B",
"name": "N2"
},
{
"bid": 1,
"type": "C",
"name": "N3"
}
],
"businesses": [
{
"id": 1,
"contract_settings": {
"A": {
"price": 100
},
"B": {
"price": 200
},
"default": "A"
}
}
]
}
I want to find contract's price, according contract's type. If contract's type is not in contract_settings, then I should use default value.
For example for current scheme I expect output as
"contracts": [
{
"bid": 1,
"type": "A",
"name": "N1",
"price": 100
},
{
"bid": 1,
"type": "B",
"name": "N2",
"price": 200
},
{
"bid": 1,
"type": "C",
"name": "N3",
"price":100 // because default settings are settings for type "A"
}
]
}
Contract_settings always has some types and 'default' always connected to existing type.
Is it possible to use field value ( contracts.type in scheme) as field name to get settings from businesses.contract_settings?
Note, that contract_settings can contains arbitrary names, so I can't use solution like this similar problem
PS. Same problem in postgres can be solved if contract_settings is jsonb field, and using code like this
((CASE WHEN businesses.contract_settings::jsonb ? contracts.contract_type::text
THEN businesses.contract_settings -> contracts.contract_amount::text
ELSE businesses.contract_settings -> (businesses.contract_settings ->> 'default') END)->>'price')::double precision