Pu sh новый объект в массив существующего документа с использованием MongoDB Java - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь изучить MongoDB и хотел бы знать, как я могу вставить POJO в существующую коллекцию. Моя коллекция выглядит именно так, как показано ниже.

{
        "_id" : ObjectId("5e930d68618c45b052492407"),
        "game" : {
                "team1" : [ 
                    { "player" : "john", "age" : 25 },
                    { "player" : "mick", "age" : 25 }
                ],

                "team2" : [ 
                    { "player" : "john", "age" : 25 },
                    { "player" : "john", "age" : 25 }
                ]
            }
}

Теперь я хочу иметь возможность вставить нового игрока в «team1», и ожидаемый результат должен выглядеть следующим образом:

{
        "_id" : ObjectId("5e930d68618c45b052492407"),
        "game" : {
                "team1" : [ 
                    { "player" : "john", "age" : 25 },
                    { "player" : "mick", "age" : 23 },
                    { "player" : "tom", "age" : 22 }   //newly inserted
                ],

                "team2" : [ 
                    { "player" : "tony", "age" : 26 },
                    { "player" : "bruce", "age" : 24 }
                ]
            }
}

Я использовал POJO в java и мой код ниже,

Player object= new Player();
newPlayer.setPlayer("tom");
newPlayer.setAge(22);

BasicDBObject setQuery = new BasicDBObject();
setQuery.append("$push", object);

collection.updateOne(Filters.and(Filters.eq("_id", "5e930d68618c45b052492407"), Filters.eq("game.team1")), setQuery);

Но вышеупомянутое, кажется, не работает, и просьба помочь мне в этом. Пожалуйста, извините, если вы обнаружите какие-либо ошибки в моем вопросе. Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы можете добавить новый поддокумент (или объект) в массив, используя следующий код. При этом используется класс Updates :

Document newPlayer = new Document("player", "tom").append("age", 22);
Bson update = Updates.push("game.team1", newPlayer);
Bson filter = Filters.eq("_id", new ObjectId("5e930d68618c45b052492407"));
UpdateResult result = collection.updateOne(filter, update);
1 голос
/ 12 апреля 2020

хорошо, я нашел решение сам, для тех, кто оказался здесь с той же проблемой, вот решение, которое я нашел.

BasicDBObject query = new BasicDBObject();
query.put("_id", valueofId);

BasicDBObject push_data = new BasicDBObject("$push", new BasicDBObject("game.team1", object));

collection.findOneAndUpdate(query, push_data);
...