2017-07-26 2 views
2

im nouveau à MongoDB et complètement confus par les requêtes. J'ai simplement besoin de mettre à jour un document dans une base de données mongodb en ajoutant une valeur de chaîne (exemple: Temperature) à une liste de chaînes. De la recherche, je sais que je dois utiliser la méthode $ push pour cela. Je pense que le code doit regarder en quelque sorte comme ceci:Java insérer la valeur à Array dans MongoDB

BasicDBObject newDocument = new BasicDBObject().append("$set", 
new BasicDBObject().append("Subscribed Topics", topic)); 

collection.update(new BasicDBObject().append("Sensor Type", sensorType), newDocument); 
new BasicDBObject("$push", 
new BasicDBObject("Subscribed Topics", topic)); 

Le champ avec le tableau est appelé « Sujets abonné », « sujet » est une chaîne (température). Ensuite, je veux mettre à jour le document dans la collection avec le "Type de capteur" correspondant. Cependant, je ne sais pas vraiment comment appeler la partie $ push correctement. J'espère que quelqu'un pourra m'aider à trier cette partie du code.

Cordialement. Mise à jour, j'ai essayé de mettre en œuvre comme suggéré dans la question en double, mais toujours eu une erreur. Très incertain si c'est la bonne façon de toute façon. Je crée un nouvel objet avec la valeur Light in for Key Subscribed Topics (le tableau). Pourquoi est-ce que je le pousse à un nouvel objet alors?

+0

double possible de [(MongoDB Java) push $ dans un tableau] (https://stackoverflow.com/questions/15436542/mongodb-java-push-into -array) – dnickless

+0

J'ai vu ce post. c'est presque pareil. Eventhoug ma structure de tableau est plus simple, je ne comprends pas comment l'adapter à mon cas d'utilisation. –

+1

Suivant celui qui pourrait aider (attention, ils utilisent un objet de gestion approprié ici, plus ils ne créent que des choses qui ne changent pas alors oubliez-le - je suis désolé): https://stackoverflow.com/questions/15371839/how-to-add-a-array-to-a-mongodb-document-using-java (Je suppose que vous avez déjà parcouru StackOverflow vous-même) – dnickless

Répondre

1

Mon Dieu! Cette question m'a fait descendre à nouveau dans le monde oublié de Java - après toutes ces années ...;) Anyhoo, voici un exemple de travail complet qui pourrait vous donner une idée de ce qui se passe. Vous pouvez exécuter le code plusieurs fois et voir comment le nombre d'éléments dans le tableau "Sujets souscrits" augmente.

J'ai utilisé le pilote suivant: https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongo-java-driver/3.3.0/mongo-java-driver-3.3.0.jar

import com.mongodb.MongoClient; 
import com.mongodb.client.MongoDatabase; 
import com.mongodb.client.MongoCollection; 

import org.bson.Document; 
import org.bson.conversions.Bson; 

import static com.mongodb.client.model.Filters.*; 
import static com.mongodb.client.model.Updates.*; 

public class MongoDbPush { 
    public static void main(String[] args) 
    { 
    MongoClient mongoClient = new MongoClient(); 
    MongoDatabase database = mongoClient.getDatabase("pushExampleDb"); 
    MongoCollection<Document> collection = database.getCollection("pushExampleCollection"); 

    String sensorType = "Temperature"; 

    // try to load existing document from MongoDB 
    Document document = collection.find(eq("Sensor Type", sensorType)).first(); 
    if(document == null) 
    { 
     // no test document, let's create one! 
     document = new Document("Sensor Type", sensorType); 

     // insert it into MongoDB 
     collection.insertOne(document); 

     // read it back from MongoDB 
     document = collection.find(eq("Sensor Type", sensorType)).first(); 
    } 

    // see what it looks like in JSON (on the first run you will notice that it has got an "_id" but no "Subscribed Topics" array yet) 
    System.out.println(document.toJson()); 

    // update the document by adding an entry to the "Subscribed Topics" array 
    Bson filter = eq("Sensor Type", sensorType); 
    Bson change = push("Subscribed Topics", "Some Topic"); 
    collection.updateOne(filter, change); 

    // read one more time from MongoDB 
    document = collection.find(eq("Sensor Type", sensorType)).first(); 

    // see what the document looks like in JSON (on the first run you will notice that the "Subscribed Topics" array has been created and has got one element in it) 
    System.out.println(document.toJson()); 

    mongoClient.close(); 
    } 
} 
+0

Cela fonctionne très bien pour mon cas, merci beaucoup! Non, je dois vérifier si le sujet est déjà disponible mais je vais le découvrir par moi-même;) (addToSet) –