2016-05-17 4 views
0

У меня есть требование о необходимости обновления всех встроенных документов с тем же атрибутом.MongoDb 3.2: Обновление записей

e.g. `Person oneToMany Addresses` 

здесь Адрес вложен документ, и я хочу, чтобы написать запрос, который даст результат, если для встроенного документа, я пишу city="New York" мои все встроенные документы должны быть обновлены, как city="New York".

EDIT:

Я дал родительский документ 'идентификатор' в документе поместить его

Ниже метод:

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(); 

Если нужно больше объяснений, пожалуйста, спросите меня. Спасибо заранее.

EDIT 2:

образец документ:

{ 
    "_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

Вы пробовали делать что-то для себя в первую очередь? – aribeiro

+0

Да, я пробовал, но он дает мне только одну запись для обновления. Я также проверил его в своей документации, но не нашел ничего, что будет соответствовать этому – Vivek

+0

. Пожалуйста, обновите свой вопрос с запросом, который вы создали, чтобы показать нам свои усилия. – aribeiro

ответ

0

Согласно документации для позиционного $ оператора говорит, что вы получите только первый матч, и это в настоящее время, как все работает по дизайну.

Невозможно до даты обновления всех согласованных поддокументов.

Для получения дополнительной информации:

Вы можете посмотреть на JIRA

Смежные вопросы