我有一个带有通知列表的用户对象
{
"notifications": {
"0": {
"id": "1",
"isRead": false,
"user": {
"id": ObjectId("4f7999c5e4b0f2e6b8490e08"),
"firstName": "X",
"lastName": "Y",
"profilePictureUrl": "URL1"
}
},
"1": {
"id": "2",
"user": {
"id": ObjectId("4f7999c5e4b0f2e6b8490e08"),
"firstName": "X",
"lastName": "Y",
"profilePictureUrl": "URL1"
}
}
},
}
当用户更改其个人资料照片时,我想更新所有相应的通知。我试图在morphia中做这样的事情,但似乎只更新了第一个条目。
Query<UserEntity> query = ds.createQuery(UserEntity.class).filter("notifications.user.id",
userProperties.id).field("notifications.user.profilePictureUrl").notEqual(userProperties.profilePictureUrl);
UpdateOperations<UserEntity> op = ds.createUpdateOperations(UserEntity.class).disableValidation()
.set("notifications.$.user.profilePictureUrl", userProperties.profilePictureUrl);
results = update(query, op);
这有什么解决方法吗?我将在后台工作中这样做,因此一个更昂贵的解决方案也可以。
答案 0 :(得分:3)
问题在于使用$运算符。目前,$运算符仅适用于查询中的第一个匹配项。 http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator
您应该更新整个列表(获取,修改和保存)。
答案 1 :(得分:0)
您应该为更新设置multi = True。见http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29
答案 2 :(得分:0)
我认为你可以将位置运算符与$ elemMatch运算符结合起来,以匹配子数组中的多个字段和多个文档。
来自具有类似案例的MongoDB错误报告中的