2016-05-17 2 views
0

J'ai besoin de mettre à jour tous les documents incorporés avec le même attribut.MongoDb 3.2: mise à jour des enregistrements

e.g. `Person oneToMany Addresses` 

ici Adresses est intégrée document et je veux écrire une requête qui donnera suite que si, pour le document embarqué, j'écris mes city="New York" tous les documents intégrés devraient être mis à jour city="New York".

EDIT:

J'ai donné le document 'id' parent dans le document embeded

est la méthode ci-dessous:

public Boolean updateAddressIsolataed(AddressModel addressModel) { 
    final Query query = new Query(); 
    query.addCriteria( 
      Criteria.where("$isolated").is(1).and(PersonEntity.Address) 
      .elemMatch(Criteria.where("parentId").is(addressModel.getParentId()))); 

    System.out.println("query:" + query.toString()); 
    final Update update = new Update(); 
    update.set(PersonEntity.Address + ".$." + "city", addressModel.getCity()); 
    WriteResult wr = mongoTemplate.updateMulti(query, update, PersonEntity); 
    return wr.isUpdateOfExisting(); 

Si besoin plus me demander des explications s'il vous plaît. Merci d'avance.

EDIT 2:

exemple de document:

{ 
    "_id" : ObjectId("571da15563500213286936bf"), 
    "_class" : "com.sample.entities.PersonEntity", 
    "name" : "Asin", 
    "age" : "22", 
    "address" : [ 
      { 
        "_id" : ObjectId("5735acc5b29cadaf65a7f822"), 
        "parentId" : "571da15563500213286936bf", 
        "city" : "New York", 
        "state" : "QWERTY", 
        "zipcode" : 500 

      }, 
      { 
        "_id" : ObjectId("5735acc5b29cadaf65a7f822"), 
        "parentId" : "571da15563500213286936bf", 
        "city" : "Mumbai", 
        "state" : "Maharashtra", 
        "zipcode" : 500 

      } 
    ] 

}

+1

Avez-vous essayé de faire quelque chose pour vous d'abord? – aribeiro

+0

oui, j'ai essayé mais ça ne me donne qu'un seul enregistrement à mettre à jour. Je l'ai également vérifié dans leur documentation mais je n'ai rien trouvé qui corresponde à cela – Vivek

+0

S'il vous plaît, mettez à jour votre question avec la requête que vous avez créée afin de nous montrer vos efforts. – aribeiro

Répondre

0

Selon la documentation pour l'opérateur de position de $ Says, vous obtenez seulement le premier match, ce qui est actuellement comment les choses fonctionnent par conception.

Il n'est pas possible jusqu'à date de mettre à jour tous les sous-documents correspondants.

Pour plus d'informations:

Vous pouvez consulter JIRA