#java #spring #mongodb
#java #весна #mongodb
Вопрос:
Итак, предположим, у меня есть документ, подобный :
{
"country": "USA",
"capital": "Washington DC",
"language": "English",
"other": {
"China": {
"capital": "Shanghai",
"language": "Chinese"
},
"Spain": {
"capital": "Madrid",
"language": "Spanish"
}
}
}
Теперь я хочу вернуть свой документ как:
{
"country": "USA",
"capital": "Washington DC",
"language": "English",
}
когда я выбираю страну как «США», но когда у меня установлена страна как «Испания», я хочу, чтобы мой запрос mongodb возвращал документ как:
{
"country": "Spain",
"capital": "Madrid",
"language": "Spanish",
}
Поля должны объединяться в соответствии со страной, указанной в поле «другое».
Как я могу этого добиться?
Комментарии:
1. Вы вкладываете ключ
spain
andchina
вother
раздел, но структура документа, которую вы просматриваете из запроса mongo, немного отличается от той, что у вас есть в документе, храните сведения о каждой стране как отдельную запись в коллекции, тогда вы сможете получить к ней доступ.
Ответ №1:
Попробуйте это:
country = "Spain"
db.collection.aggregate([
// Make a uniform structure (why do you have 'USA' and 'other'?)
{ $replaceRoot: { newRoot: { $mergeObjects: ["$other", { USA: { capital: "$capital", language: "$language" } }] } } },
{ $project: { countries: { $objectToArray: "$$ROOT" } } },
{
$set: {
countries: {
$filter: {
input: "$countries",
cond: { $eq: ["$$this.k", country] }
}
}
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{ country: { $first: "$countries.k" } },
{ $first: "$countries.v" }]
}
}
}
])