RethinkDB - 删除嵌套对象

时间:2014-09-02 04:22:37

标签: 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'}})

但我收到了意外令牌'}'的错误。知道怎么了吗?

2 个答案:

答案 0 :(得分: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的对象?这会让事情变得更容易。

答案 1 :(得分:0)

你的最后一个接近于对我有用的东西,只需要在嵌套的JSON对象中添加true

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