2014-09-02 2 views
0

Я пытаюсь удалить вложенный объект, но вместо того, чтобы исчезнуть, он заменяется пустым объектом.RethinkDB - удалить вложенный объект

Вот структура моих документов:

[ 
    { 
     "id": "0" , 
     "name": "Employee 1" , 
     "schedules": [ 
        {"Weekdays": "yes"}, 
        {"Weekends": "no"} 
        ] 
    } , 

    { 
     "id": "1" , 
     "name": "Employee 2" , 
     "schedules": [ 
        {"Weekdays": "no"}, 
        {"Weekends": "yes"} 
        ] 
    } 

] 

Допустим, я хочу удалить «Выходные дни». Вот мой код:

r.db('shank').table('teachers').replace(r.row.without({'schedules': 'Weekends'})).run(connection, function(err, result) { 
    if (err) throw err; 
    ; 
    //confirmation stuff 
     }); 
}); 

Теперь, если я смотрю на моем столе, документы есть это:

"schedules": [ 
        {"Weekdays": "yes"}, 
        {} 
      ] 

Я также попытался изменить его, чтобы следовать синтаксис описан here, сделав его:

r.row.without({'schedules': {'Weekends'}}) 

, но у меня есть ошибка неожиданного токена '}'. Любая идея, что случилось?

ответ

1

Это должно работать:

r.db('test').table('test').get('0').update(function(doc) { 
    return doc.merge({ 
    schedules: doc("schedules").filter(function(schedule) { 
     return schedule.hasFields('Weekends').not() 
    }) 
    }) 
}) 

расписаниям поля является массивом, является то, что ожидали? Есть ли причина, почему это не просто объект с двумя полями Weekends и Weekdays? Это упростит ситуацию.

+0

Оба этим еще оставить пустой объект внутри «графики» массив – BarthesSimpson

+0

Там было нет веской причины, почему расписания были массивом. Я изменил его на объект, и ваш оригинальный ответ сработал. – BarthesSimpson

0

Ваши последняя близок к тому, что работал для меня, просто нужно добавить true к вложенному объекту JSON:

r.row.without({'schedules': {'Weekends': true}}) 
Смежные вопросы