Итак, давайте начнем с некоторых стран в нашей базе данных
db.countries.insertMany([
{
"name" : {
"en": "Germany",
"es": "Alemania",
},
"Short_code" : "DEU"
},
{
"name" : {
"en": "Spain",
"es": "España",
},
"Short_code" : "ESP"
},
{
"name" : {
"en": "England"
},
"Short_code" : "GB"
}
]);
Обратите внимание, что DEU
и ESP
имеют испанский перевод, а GB
- нет.
Теперь мы можем написать простой запрос агрегации, используя оператор $ifNull
(https://docs.mongodb.com/manual/reference/operator/aggregation/ifNull/) для получения значения es
, если оно существует, или en
, если нет.
например, запрос ESP
вернет es
имя:
> db.countries.aggregate([
... { $match: { "Short_code" : "ESP" } },
... { $project: { "name" : { $ifNull: ["$name.es", "$name.en"] }}}
... ]);
{ "_id" : ObjectId("5b923f4b1f269cd18cd2f209"), "name" : "España" }
однако запрос GB
вернет en
имя:
> db.countries.aggregate([
... { $match: { "Short_code" : "GB" } },
... { $project: { "name" : { $ifNull: ["$name.es", "$name.en"] }}}
... ]);
{ "_id" : ObjectId("5b923f4b1f269cd18cd2f20a"), "name" : "England" }
Чтобы сделать поле es
динамическим, вам нужно просто создать выражение "$name.es"
того, что вы хотите выбрать в вашем приложении, например:
var userLanguage = "es";
{ $project: { "name" : { $ifNull: ["$name." + userLanguage, "$name.en"] }}}
Для получения только "Short_code"
& "Country Name"
, код
{
$project: {
"_id": 0,
"Short_code": 1,
"name" : { $ifNull: ["$name." + userLanguage, "$name.en"] }
}
}