2014-06-10 6 views
1

J'ai une collection dans MongoDB et ses documents ont 3 champs comme ci-dessous:carte de mise à jour directement dans MongoDB

{ 
    "_id" : { "$oid" : "5396ad5de4b09ea27a641ed6"} , 
    "word" : "test_word" , 
    "doc_occurrence" : "'total':25,'sport':10" , 
    "total_occurrence" : "'total':32,'sport':15" 
} 

Je veux savoir ce que je peux mettre à jour la valeur de la clé en utilisant directement java (à l'aide de points par exemple) ? ou je dois obtenir la carte complètement et mettre à jour de cette façon?

Si je dois utiliser un sous-document pour mettre à jour les valeurs par notation par points, quel type de type de données je dois utiliser pour conserver les champs de sous-doublement?

p: la structure de collection ci-dessus est ce qui est imprimé en java. structure de collection dans le terminal mongo est comme ceci:

{ 
    "_id" : ObjectId("5396d751e4b0cabeab49be0b"), 
    "word" : "test_word", 
    "doc_occurrence" : { "total" : 25, "sport" : 10 }, 
    "total_occurrence" : { "total" : 32, "sport" : 15 } 
} 
+0

Quel pilote mongodb pour Java utilisez-vous? – mvw

+0

J'utilise mongo-java-driver-2.10.1 – zsh

+0

OK, celui-ci semble représenter les documents JSON en tant que [BasicDBObject] (http://api.mongodb.org/java/current/com/mongodb/BasicDBObject.html) s. Vous devriez utiliser ses méthodes pour construire/modifier le document. – mvw

Répondre

0

Ceux-ci vous pouvez mettre à jour un seul champ par ce qui suit:

BasicDBObject query = new BasicDBObject(
     "_id", new ObjectId("5396ad5de4b09ea27a641ed6") 
    ); 
    BasicDBObject update = new BasicDBObject(
     "$set", new BasicDBObject("doc_occurance.total", 30) 
    ); 

    table.update(query,update); 

donc celui-ci utilise l'opérateur $set et l'utilisation de « notation par points » pour identifier et mettre à jour un élément singulièrement dans un sous-document. Vous pouvez spécifier autant de champs que vous le souhaitez dans la partie opérateur $set de la mise à jour.

0

Je suppose que vous êtes à la recherche findAndModify. Cette question traite plus ou moins votre problème: MongoDb's $set equivalent in its java Driver.

Je ne suis pas sûr de la structure de votre document ... peut-être que vous avez oublié quelques { } au doc_occurrence et total_occurrence.

+0

je viens de modifier la question. – zsh