Ajouter une chaîne au tableau existant dans le document MongoDB en Java


J'essaie d'ajouter une chaîne à la fin d'un tableau existant dans un document MongoDB.

J'ai essayé de regarder la documentation pour MongoDB qui m'a conduit à la page pushet à d'autres questions similaires. Aucun d'entre eux n'a fonctionné jusqu'à présent que le document que j'ai n'a pas d'ID fait par moi, ils sont générés automatiquement lorsqu'un nouvel élément du tableau est ajouté.

Document dans la collection:

_id: 5ce85c1e1c9d4400003dcfd9
name: "Halloween party"
category: 2
date: 2019-10-31T23:00:00.000+00:00
address: "Sample Street, london"
description: "It's Halloween, bring your costumes and your personality to the studen..."
bookings: Array
    0: "1610512"

Je peux obtenir le document que je veux ajouter la chaîne avec le code suivant.

Le Code Java:

MongoDatabase database = mongoClient.getDatabase("KioskDB");
MongoCollection<Document> Kiosk = database.getCollection("Events");

Document searchQuery = new Document();
searchQuery.put("name", selectedActivityName);
searchQuery.put("bookings", username);

FindIterable<Document> documents = Kiosk.find(searchQuery);

for (Document document: documents){
     System.out.println(document);
}

Me donnant la sortie suivante

Document{{_id=5ce85c1e1c9d4400003dcfd9, name=Halloween party, category=2, date=Thu Oct 31 23:00:00 GMT 2019, address=Sample Street, london, description=It's Halloween, bring your costumes and your personality to the student Bar and join us in this age long celebration., bookings=[1610512]}}

Comment puis-je ajouter une nouvelle chaîne à la fin du tableau en me donnant quelque chose comme ceci montré ci-dessous.

Document final souhaité

_id: 5ce85c1e1c9d4400003dcfd9
name: "Halloween party"
category: 2
date: 2019-10-31T23:00:00.000+00:00
address: "Sample Street, London"
description: "It's Halloween, bring your costumes and your personality to the studen..."
bookings: Array
    0: "1610512"
    1: "1859301"

MODIFIER: A pu trouver la réponse avec le code suivant.

DBObject listItem = new BasicDBObject("bookings", username);
Kiosk.updateOne(eq("name", selectedActivityName), new Document().append("$push", listItem));

Où username est le numéro (Ex: 1859301), selectedActivityName est le nom du champ nom (Ex: Fête d'Halloween) et Kiosque est le nom de la collection.

Author: PawnDelivery, 2019-05-25

2 answers

Je vais essayer ce code selon la documentation. Réf. https://mongodb.github.io/mongo-java-driver/3.4/driver/getting-started/quick-start/

Document doc = new Document("name", "Halloween party")
                    .append("bookings", Arrays.asList("1859301"));
 1
Author: Wing Kui Tsoi, 2019-05-25 01:05:02

Depuis le pilote Java 3.0, ils ont ajouté des méthodes d'assistance pour les filtres qui rendent l'interrogation de mongo beaucoup plus agréable et lisible. Dans 3.1, ils ont également ajouté des méthodes d'aide pour les mises à jour qui rendent les choses comme celle-ci assez simples et faciles à comprendre ce qui se passe Voir:

Https://mongodb.github.io/mongo-java-driver/3.6/javadoc/com/mongodb/client/model/Filters.html https://mongodb.github.io/mongo-java-driver/3.6/javadoc/com/mongodb/client/model/Updates.html

Bson query = Filters.eq("name", selectedActivityName);
Bson update = Updates.push("bookings", username);

collection.findOneAndUpdate(query, update);

Faire cela dans les anciennes versions est possible. Cette syntaxe devrait toujours être vraie pour les versions antérieures à 3.0. Cependant, si vous utilisez une version antérieure à 3.0, vous devrez remplacer Document par BasicDBObject.

Bson query = new Document("name", selectedActivityName);
Bson update = new Document("$push", new Document("bookings", username));

collection.findOneAndUpdate(query, update);
 0
Author: Plancke, 2019-05-25 01:58:45