Comment effectuer une mise à jour en bloc de documents dans MongoDB avec Java
Je suis en utilisant MongoDB 3.2 et MongoDB Pilote Java 3.2. J'ai un tableau d'un couple de centaines de documents mis à jour, qui devrait maintenant être enregistrés ou stockés dans MongoDB. Pour ce faire, j'ai effectuer une itération sur le tableau et à appeler pour chaque document dans ce tableau, la updateOne()
méthode.
Maintenant, je tiens à re-mettre en œuvre cette logique avec une mise à jour en bloc. J'ai essayé de trouver un exemple de mise à jour en bloc dans MongoDB 3.2 avec MongoDB Pilote Java 3.2.
J'ai essayé ce code:
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = (DB) mongo.getDB("test1");
DBCollection collection = db.getCollection("collection");
BulkWriteOperation builder = collection.initializeUnorderedBulkOperation();
builder.find(new BasicDBObject("_id", 1001)).upsert()
.replaceOne(new BasicDBObject("_id", 1001).append("author", "newName"));
builder.execute();
Mais il semble que cette approche est basée sur une ancienne MongoDB Pilote Java, tels que les 2.4 et utilise des méthodes obsolètes.
Ma question:
Comment effectuer une mise à jour en bloc de documents dans MongoDB 3.2 avec MongoDB Pilote Java 3.2?
OriginalL'auteur Mike B. | 2016-03-07
Vous devez vous connecter pour publier un commentaire.
À l'aide de l'exemple dans le manuel de la nouvelle
bulkWrite()
API, voici le test de la collection qui contient les documents suivants:Suivantes
bulkWrite()
effectue plusieurs opérations sur lacharacters
collection:Mongo shell:
qui imprime la sortie:
L'équivalent Java 3.2 mise en œuvre suit:
Pour votre question, utilisez le
replaceOne()
méthode et ce serait mise en œuvre queGrand & merci. Deux questions. 1. Est-il en règle générale, quand je dois passer de la simple mise à jour mise à jour en bloc dans
MongoDB
? Je veux dire à partir du volume des documents point de règle. 2. Quant àreplaceOne()
, tous mes documents mis à jour contiennent une mise à jour de l'un des deux champs. Pourquoi devrais-je utiliser cette méthode et pasupdateOne()
? Comme je le comprends,replaceOne()
remplace le document entier, tandis queupdateOne()
peut juste mettre à jour la valeur des domaines spécifiques, qui devrait être plus rapide, suis-je le droit?Je pense que ce qui justifie une nouvelle question qui est différent de ce que vous demandiez. Si vous poster une autre question, je vais être comme les autres, heureux d'y répondre. Le cas général est ici une question, une réponse. Je peux répondre à votre question, mais Elle doit être autre chose. S'il vous plaît poster séparément.
La réponse générale est
replaceOne
remplace un seul document dans la collection qui correspond au filtre. Si plusieurs documents match,replaceOne
remplacera le premier document correspondant.updateOne()
mises à jour d'un document unique au sein de la collection basée sur le filtre. Si{upsert: true}
option est spécifiée et aucun document correspondent au filtre, un nouveau document est créé à l'aide de la comparaison d'égalité dans le filtre avec les modifications de mise à jour. Si le filtre a seulement les opérations de comparaison, seules les modifications de la mise à jour sera appliquée pour le nouveau document.J'ai posté une autre question: stackoverflow.com/questions/35848688/...
OriginalL'auteur chridam