2014-09-02 132 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() 
    }) 
    }) 
}) 

领域的时间表是一个数组,那是预期?是不是有两个字段WeekendsWeekdays的对象?这会让事情变得更容易。

+0

这两项仍然留下了“时间表”阵列 – BarthesSimpson 2014-09-02 04:45:07

+0

有内部的空余对象时间表是一个数组没有理由。我将它改为一个对象,并且你原来的答案奏效了。 – BarthesSimpson 2014-09-02 05:12:15

0

你的最后一个靠近我什么工作,只需要一个true添加到嵌套的JSON对象:

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