Rethinkdb更新嵌套对象
Rethinkdb update nested object
我有如下文件-
{
"badgeCount": {
"0e2f8e0c-2a18-499d-8e64-75b5d284e31a": 0 ,
"c0d07f5c-25ff-4829-8145-c33c0871f889": 0
} ,
"createdDate": Mon Oct 10 2016 19:25:10 GMT+00:00 ,
"deleted": false ,
"id": "1330c8b8-38a2-46e4-b93d-f7ff84a423ed",
"joinedUserIds":
[
"0e2f8e0c-2a18-499d-8e64-75b5d284e31a"
]
}
我想做的是删除 joinedUserId "0e2f8e0c-2a18-499d-8e64-75b5d284e31a" 并通过删除第一个 属性 "0e2f8e0c-2a18-499d-8e64-75b5d284e31a": 0 来更新 badgeCount相同的查询。
我尝试像下面这样更新 badgeCount-
r.db('mydb').table('discussion').filter({"id": "1330c8b8-38a2-46e4-b93d-f7ff84a423ed"})
.update(function(s){
return {
badgeCount: s('badgeCount').without("0e2f8e0c-2a18-499d-8e64-75b5d284e31a")
}
})
但它不起作用。不知道我错过了什么。
谢谢
阿努普
Rethink 不是这样工作的。它不会用 update
.
重写对象
因此,对于这种情况,您需要 replace
当前对象。而且,顺便说一句,最好使用 get
而不是 filter
,因为它更快。在这种情况下做同样的事情,因为 id 字段是唯一的。
所以,如果你想从 badgeCount
中删除 "0e2f8e0c-2a18-499d-8e64-75b5d284e31a"
,你应该使用 replace
:
r.db('mydb').table('discussion').get("1330c8b8-38a2-46e4-b93d-f7ff84a423ed").replace(function(s){
return s.without({badgeCount : {"0e2f8e0c-2a18-499d-8e64-75b5d284e31a" : true}}).without("joinedUserIds").merge({
joinedUserIds : s("joinedUserIds").filter(function(id){
return id.ne("0e2f8e0c-2a18-499d-8e64-75b5d284e31a");
})
});
})
我有如下文件-
{
"badgeCount": {
"0e2f8e0c-2a18-499d-8e64-75b5d284e31a": 0 ,
"c0d07f5c-25ff-4829-8145-c33c0871f889": 0
} ,
"createdDate": Mon Oct 10 2016 19:25:10 GMT+00:00 ,
"deleted": false ,
"id": "1330c8b8-38a2-46e4-b93d-f7ff84a423ed",
"joinedUserIds":
[
"0e2f8e0c-2a18-499d-8e64-75b5d284e31a"
]
}
我想做的是删除 joinedUserId "0e2f8e0c-2a18-499d-8e64-75b5d284e31a" 并通过删除第一个 属性 "0e2f8e0c-2a18-499d-8e64-75b5d284e31a": 0 来更新 badgeCount相同的查询。
我尝试像下面这样更新 badgeCount-
r.db('mydb').table('discussion').filter({"id": "1330c8b8-38a2-46e4-b93d-f7ff84a423ed"})
.update(function(s){
return {
badgeCount: s('badgeCount').without("0e2f8e0c-2a18-499d-8e64-75b5d284e31a")
}
})
但它不起作用。不知道我错过了什么。
谢谢 阿努普
Rethink 不是这样工作的。它不会用 update
.
因此,对于这种情况,您需要 replace
当前对象。而且,顺便说一句,最好使用 get
而不是 filter
,因为它更快。在这种情况下做同样的事情,因为 id 字段是唯一的。
所以,如果你想从 badgeCount
中删除 "0e2f8e0c-2a18-499d-8e64-75b5d284e31a"
,你应该使用 replace
:
r.db('mydb').table('discussion').get("1330c8b8-38a2-46e4-b93d-f7ff84a423ed").replace(function(s){
return s.without({badgeCount : {"0e2f8e0c-2a18-499d-8e64-75b5d284e31a" : true}}).without("joinedUserIds").merge({
joinedUserIds : s("joinedUserIds").filter(function(id){
return id.ne("0e2f8e0c-2a18-499d-8e64-75b5d284e31a");
})
});
})