仅当数组不包含rethinkDB

时间:2016-05-06 04:19:01

标签: javascript rethinkdb reql

我想在一个类似于以下内容的记录中向数组追加一个值:

{
  _id: 'foo',
  cols: [
    'abc123',
    '123abc'
  ]
}

此字段可能不存在,需要在追加之前创建。如果值已存在于数组中,我也不想追加到数组。到目前为止,我有以下内容满足除了不添加重复条目的最后要求之外的所有要求。

r.table('users')
 .get(userId)
 .update({
   cols: r.row('cols').default([]).append(uuid)
 }) 

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

你有几个解决方案。

r.table('users')
 .get(userId)
 .update({
   cols: r.branch(r.row('cols').default([]).contains(uuid),
                   r.row('cols'),
                   r.row('cols').default([]).append(uuid))
 }) 

或者我们可以使用setInsert作为@char建议

r.table('users')
 .get(userId)
 .update({
   cols: r.row('cols').default([]).setInsert(uuid))
 }) 

setInsert的问题是确保返回一组。因此,如果您有意将重复元素放在原始cols中,则会删除重复元素。