我收集了几千个字符.每个字符都有八个本地化字段和九种不同的支持语言.下面是我正在使用的模式的一个示例,其中填充了示例数据(只是使用了一个较小的文档).
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"
}
谢谢你看这个.第一次在这里使用MongoDB用户和数据建模新手 UPDATE个 我刚刚找到了一个示例(感谢ChatGPT),它可以使用$PROJECT做我需要的事情.有没有更好的方式来做到这一点?或者可能是更短的解决方案(每个文档有8个本地化的字段,我必须将其添加到$project中);我可以将我想要的字段投影到根级别,然后将_all字段从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"
}
}
])
UPDATE #2个 在进一步催促下,ChatGPT给了我这个.有谁能确认这是一条合适的管道,或者知道有更好的方法来做到这一点?由于其他原因,我目前无法连接到数据库
db.characters.aggregate([
{
$match: {
"key": 123
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: ["$$ROOT", "$translations.en"]
}
}
},
{
$project: {
"translations": 0
}
}
])