首页 文章

Rethinkdb更新嵌套对象

提问于
浏览
0

我有一份如下文件 -

{  
	"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")
      }
    })

但它不起作用 . 不知道我错过了什么 .

谢谢Anup

1 回答

  • 0

    重新思考't work like this. It doesn' t用 update 重写对象 .

    所以,对于这种情况,你需要 replace 当前对象 . 并且,顺便说一句,最好使用 get 而不是 filter ,因为它导致's faster. There are doing the same in this situation '因为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");
        })
      });
    })
    

相关问题