Rethinkdb обновляет вложенный объект

#updates #rethinkdb

#Обновления #rethinkdb

Вопрос:

У меня есть документ, подобный приведенному ниже-

 {  
	"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» и обновить badgeCount, удалив первое свойство «0e2f8e0c-2a18-499d-8e64-75b5d284e31a»: 0 в том же запросе.

Я попытался обновить 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:

Переосмысление так не работает. Он не перезаписывает объект с update помощью .

Итак, для этого случая вам нужен replace текущий объект. И, кстати, лучше использовать get вместо filter , потому что это быстрее. В этой ситуации происходит то же самое, потому что поле id уникально.

Итак, если вы хотите удалить "0e2f8e0c-2a18-499d-8e64-75b5d284e31a" из badgeCount , вы должны использовать 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");
    })
  });
})
  

Комментарии:

1. Спасибо за ваш ответ. Это отлично работает, если я хочу заменить только badgeCount. Но я также хочу удалить 0e2f8e0c-2a18-499d-8e64-75b5d284e31a из joinedUserIds в том же запросе. Как я могу это сделать?

2. Я получил эту ошибку, выполнив этот код — «Невозможно выполнить без не-объектной последовательности null «.

3. @AnupDasGupta вы уверены, что у вас есть элемент с идентификатором «1330c8b8-38a2-46e4-b93d-f7ff84a423ed» в rethink?

4. мой плохой :). В этом проблема. Большое спасибо.