Как написать запрос для обновления «contacts.collection.value._class = SubClass2» и установить значение xyz с критериями Spring Mongodb?Spring MongoDB Criteria update
{ "_class" : "MyClass",
"_id" : ObjectId("51ecc95503644e4489bb742e"),
"contacts" : [
{ "property1" : "Value1",
"property2" : "Value2",
"collection" : [
{ "value" : "1",
"_class" : "SubClass1" },
{ "value" : "2",
"_class" : "SubClass2" },
{ "value" : "2",
"_class" : "SubClass3" },
Я пытаюсь сделать это с помощью класса данных Spring Mongo Criteria.
До сих пор я получил это, но это не работает
query = new Query(Criteria.where("_id").is(myClassId)
.and("contacts.collection.value").is("2")
.and("contacts.collection._class").is("SubClass2"));
update.set("contacts.collection.$.value", "3");
mongoTemplate.updateFirst(query, update, MyClass.class);
Я получаю эту ошибку;
java.lang.IllegalArgumentException: Не найдено значения свойства ...!
Примечание:
- "Контакты" коллекция представляет собой список некоторого интерфейса.
- Я дезинфицировал имена переменных и имена классов.
- Если вы не знаете, как это сделать с критериями, пожалуйста, дайте мне код java.
Благодаря
Добавление StackTrace
Вот трассировки стека
java.lang.IllegalArgumentException: No property xyz found on com.blah.SomeInterface!
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225) ~[spring-data-commons-1.5.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.convert.QueryMapper.getPath(QueryMapper.java:202) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.convert.QueryMapper.getTargetProperty(QueryMapper.java:190) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:86) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:925) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.MongoTemplate$11.doInCollection(MongoTemplate.java:920) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:388) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.MongoTemplate.doUpdate(MongoTemplate.java:920) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
at org.springframework.data.mongodb.core.MongoTemplate.updateFirst(MongoTemplate.java:902) ~[spring-data-mongodb-1.2.1.RELEASE.jar:na]
На основании ответа Jayz, я написал обновление с RoboMongo и он работает обновляет результат запроса!
db.myDB.update(
{
"_id":ObjectId("51ecc95503644e4489bb742e"),
"contacts.collection._class": "SubClass1",
"contacts.collection.value": "1",
},
{
$set: { 'contacts.0.collection.$.value': '3' }
},
{ getLastError: 1 });
Но когда я пытаюсь сделать это с помощью mongoTemplate, ничего не обновляется.
Не могли бы вы разместить весь стек? – udalmik
След стека добавлен. – aug70co