我有几千个字符的集合。每个字符都有八个本地化字段和九种不同的支持语言。下面是我使用的模式示例,其中填充了示例数据(仅使用较小的文档)。
db.characters.insertMany([
{
"key": 123,
"attack": 1337,
"numberField3": 30
"translations": {
"en": {
"name": "Englishh name"
"description": "English description"
},
"es": {
"name": "Spanish name"
"description": "Spanish description"
}
}
},...
])
如何进行查询以返回包含指定语言的非本地化字段和本地化字段的文档? 伪查询:
db.characteres.find({"key":123}).addAll("translations.en")
将返回:
{
"key": 123,
"attack": 1337,
"numberField3": 30
"name": "Englishh name"
"description": "English description"
}
更新 我刚刚找到了一个示例(感谢 ChatGPT),它可以使用 $project 完成我需要的操作。有没有更高效的方法来做到这一点?或者可能更短的解决方案(每个文档都有 8 个本地化字段,我必须将其添加到 $project 中);我可以将我想要的字段投影出来,然后将 Translation.en 中的所有字段添加到根级别吗?这将是实现我在查询中尝试本地化的更通用的方法
db.characters.aggregate([
{
$match: {
"key": 123
}
},
{
$project: {
"_id": 0,
"key": 1,
"attack": 1,
"numberField3": 1,
"name": "$translations.en.name",
"description": "$translations.en.description"
}
}
])
您可以使用
$project
阶段来实现这一点。 文档
db.characters.aggregate([
{
$match: {
"key": 123
}
},
{
$project: {
"key": 1,
"attack": 1,
"numberField3": 1,
"name": "$translations.en.name",
"description": "$translations.en.description"
}
}
])