如何仅在数组不包含 rethinkDB 值时附加到数组

How to append to array only if it doesn't contain value with rethinkDB

我想将一个值附加到类似于以下内容的记录中的数组:

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

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

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

感谢任何帮助,谢谢!

你有几个解决方案。

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,它将删除重复元素。