当前位置: 首页 > 知识库问答 >
问题:

Spring Data MongoreRepository保存具有不同字段数的对象

阎唯
2023-03-14

我将游戏状态存储在MongoDB数据库中,并使用Spring数据来管理数据库交互。我是Spring Data的新手,不确定如何处理下面的场景。

我有一个“游戏”类型的文档,带有一堆属性,如id,时间戳等。这些属性之一是用户采取的操作列表。这些行动的形式如下:

{type:2},{type:3,value:4},{type:5,ID:1234},{type6},{type:5,value:6,ID:56}

共有1个答案

席烨
2023-03-14

我将用一个例子解释如何处理不同的字段。下面的game.javaPOJO类表示到game集合文档的对象映射。

public class Game {

    String name;
    List<Actions> actions;

    public Game(String name, List<Actions> actions) {
        this.name = name;
        this.actions = actions;
    }

    public String getName() {
        return name;
    }

    public List<Actions> getActions() {
        return actions;
    }

    // other get/set methods, override, etc..


    public static class Actions {

        Integer id;
        String type;

        public Actions() {
        }

        public Actions(Integer id) {
            this.id = id;
        }

        public Actions(Integer id, String type) {
            this.id = id;
            this.type = type;
        }

        public Integer getId() {
            return id;
        }

        public String getType() {
            return type;
        }

        // other methods
    }
}

对于actions类,需要为构造函数提供可能的组合。使用具有IDtype等的适当构造函数。例如,创建game对象并保存到数据库:

Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);

它存储在数据库集合game中,如下所示(从mongoshell查询):

{
        "_id" : ObjectId("5eeafe2043f875621d1e447b"),
        "name" : "G-1",
        "actions" : [
                {
                        "_id" : 1000
                }
        ],
        "_class" : "com.example.demo.Game"
}
{
        "_id" : ObjectId("5eeb02fe5b86147de7dd7484"),
        "name" : "G-9",
        "actions" : [
                {
                        "type" : "type-x"
                }
        ],
        "_class" : "com.example.demo.Game"
}
{
        "_id" : ObjectId("5eeb034d70a4b6360d5398cc"),
        "name" : "G-11",
        "actions" : [
                {
                        "_id" : 2,
                        "type" : "type-y"
                }
        ],
        "_class" : "com.example.demo.Game"
}
 类似资料:
  • 我对使用Jackson还是个新手,我正在尝试遵循我的团队的模式来反序列化我们的JSON。现在我遇到了一个问题,当一个字段名与JSON属性不匹配时。 工作示例: 如果JSON属性是hasProfile,它工作得很好,但是如果是has_profile(这是我们的客户端正在编写的内容),它就不工作了,并且我得到一个错误:。我尝试向hasProfile添加JsonProperty注释,但仍然不起作用: 我

  • 我的DB返回给我一个重复的java对象列表,其中只有一个属性不同,即course。例如,针对1个学生:针对2个不同课程的2个学生对象。我创建了一个模型类,我想在其中填充来自DB的student对象。对于model class中的课程,我已经创建了字符串列表。

  • 问题内容: 在对fielddata与doc_values进行的一些实验中,我遇到了一个奇怪的情况。在我以前的映射中,我根本没有使用doc值。在新的映射中,我已添加到映射中的所有字段,但分析的字符串字段和布尔值(直到2.0才受支持)除外。 因此,详细而言,这是我的处理方式: 重新索引所有数据之前,我重新启动了ES 1.7集群,并使用排序,聚合和脚本字段运行查询以“预热”字段数据缓存。然后,我询问端点

  • 问题内容: 我正在练习继承。 我有两个相似的类,我想将其同化为一个数组,因此我想将Object类用作超类,因为所有内容都是Object的子类。 因此,例如,我将T类和CT类放入一个名为all的数组中,如下所示: 我跳过了声明,因为那不是我的问题。 当我希望使用循环在数组内调用函数时,我真正的问题就变成了: T和CT分别涉及的类都具有beingShot方法,该方法是公共的。 Eclipse建议将它们

  • 我目前正在开发一个应用程序,用于查看谁负责不同的病人,但是我还没有解决如何用不同的对象类型填充一个表格。 下面是我的表视图控制器的代码。TableView 最终将有四个不同的对象类型,所有对象类型都将从数据库中检索。 我希望我的表包含患者对象、用户对象(负责)和关系管理器对象。 下面是我的代码,如果你需要更多的代码,请告诉我:-)。 关系数据是返回的关系管理器对象。此对象包含一个用户对象、一个患者

  • 问题内容: 我正在尝试创建一个表单,其中每个文本字段都有一个UIPickerView,用户可以用来选择所需的选项。我需要为每个文本字段使用不同的信息数组,但是我似乎无法使其正常工作,并且我已经坚持了很长时间。 我有一个可能可行的方法,但由于每个字段具有相同的名称,因此我无法从Firebase的文本字段中检索数据。 到目前为止,这是我的代码,这是我尝试过的最新方法,不起作用: 如果有人知道我可以实施