Java 如何在mongoDB文档的归档中保留特殊密钥并删除其中的额外密钥?

Java 如何在mongoDB文档的归档中保留特殊密钥并删除其中的额外密钥?,java,mongodb,mongodb-query,mongodb-java,Java,Mongodb,Mongodb Query,Mongodb Java,假设我有一个mongoDB集合,其中包含如下文档 { "_id" : ObjectId("5cb2dd4d378a8e2484e7bb69"), "name":"ali", "creator" : { "name":"user1", "code":2, "type" : "desk", "type_id" : "desk::bb36640a-e384-45ec-aafa-ce71b724c389" }

假设我有一个mongoDB集合,其中包含如下文档

{
    "_id" : ObjectId("5cb2dd4d378a8e2484e7bb69"),
    "name":"ali",
    "creator" : {
        "name":"user1",
        "code":2,
        "type" : "desk",
        "type_id" : "desk::bb36640a-e384-45ec-aafa-ce71b724c389"
    },
     "creatorPosition" : {
        "name":"user2",
        "role":"admin",
        "type" : "position",
        "type_id" : "position::9f711bb3-3aad-4936-b75a-4ddd024b4bb1"
    },
     "creatorDetails" : {
        "name":"user1",
        "type" : "deskUserAssignment",
        "type_id" : "deskUserAssignment::dd46fa14-0fd3-43d7-8312-471bc253ee80"
    }
}
我想从每个字段中保留两个键值(
“type”、“type\u id”
),并删除额外的键值(例如
“name”、“code”、“role”

我可以在一个mongo查询中处理这个问题吗


另外,我想用java编写这段代码,最简单的方法是使用提供

例如,包括使用
org.springframework.data.mongodb.core.query.query
org.springframework.data.mongodb.core.MongoTemplate
检索结果的字段:


查询=新查询();
query.fields().include(“creator.type”).include(“creator.type_id”);
query.fields().include(“creatorPosition.type”).include(“creatorPosition.type_id”);
query.fields().include(“creatorDetails.type”).include(“creatorDetails.type_id”);
List documents=mongoTemplate.find(查询,Document.class,“您的集合”);


有关更多信息,请参阅本文:

不幸的是,我不知道每个文档中存在多少字段,直到您可以扩展它并将其用于其他字段,例如上面的示例,它应该可以100%工作。这不是一个很好的模式。类似于<代码>“数据”:[{“信息”:“创建者”,“名称”:“用户1”,“代码”:2,“类型”:“桌面”,“类型id”:“桌面::bb…”,{“信息”:“创建者位置”,“名称”:“用户2”,“类型”:“位置”,“类型id”:“位置::9f…”,{…}]对于查询非常有用,基本上使您的问题成为“两个”的简单投影问题您想要的属性(“三个”当然带有“信息”字段)。保持该模式不变并没有一个性能良好的答案。您可以这样做,但需要大量不必要的开销。