我收集了几千个字符.每个字符都有八个本地化字段和九种不同的支持语言.下面是我正在使用的模式的一个示例,其中填充了示例数据(只是使用了一个较小的文档).

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
        }
    }
])

推荐答案

  1. $replaceRoot{newRoot{mergeObjects}}以合并Translations.en 进入根级别
  2. $unset可删除翻译
db.characters.aggregate([
    {
        $match: {
            "key": 123
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: ["$$ROOT", "$translations.en"]
            }
        }
    },
    {
        $unset: ["translations"]
    }
])

Java相关问答推荐

是否可以从@ TrustMapping中删除特定方法的基路径?

try Dockerize Maven应用程序,但发布版本21不支持"

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

Java .类参数不通过构造函数传递

连接Quarkus中的两个异步操作

FALSE:它应该在什么时候使用?

如何调整工作时间日历中的时间

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

如何使用log4j2(Json)记录由";异常引起的所有";?

try 从REST API返回对象列表时出错

从Spring6中的JPMS模块读取类时出现问题

如何在EL处理器中定义带有命名空间的变量?

在应用程序运行时更改LookAndFeel

如何调整JButton的大小以适应图标?

谷歌应用引擎本地服务器赢得';t在eclipse上运行

验证没有';t work on Hibernate Entity';s字段

org.springframework.web.HttpRequestMethodNotSupportedException:请求方法';帖子';不支持

如何使用stream.allMatch()为空流返回false?

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序

将天数添加到ZonedDateTime不会更改时间