CockroachDB中是否有MongoDB $addToSet的等效操作符?
CockroachDB 实现类似 MongoDB $addToSet 的功能
CockroachDB 没有内置的类似 MongoDB $addToSet 的操作符,但可以通过组合内置函数来实现「仅当目标值不存在时追加到数组」的需求,以下是两种常见场景的实现方式:
针对原生数组类型(如 string[]、int[])
假设你有一张表 test_table,包含 id 和 tags(string[] 类型)字段,要给 id=1 的记录追加标签 "new_tag",且仅当标签不存在时执行:
UPDATE test_table SET tags = array_append(tags, 'new_tag') WHERE id = 1 AND array_position(tags, 'new_tag') IS NULL;
array_position(tags, 'new_tag') IS NULL用于判断目标值是否不在数组内- 只有满足判断条件时,才会执行
array_append完成追加操作
针对 JSONB 数组类型
如果你的数组是 JSONB 格式(如 jsonb 类型的数组),可以用 JSONB 专属操作符实现:
UPDATE test_table SET tags = tags || '["new_tag"]'::jsonb WHERE id = 1 AND NOT tags @> '["new_tag"]'::jsonb;
@>是 JSONB 的包含操作符,NOT tags @> '["new_tag"]'::jsonb表示数组不包含目标值||用于拼接 JSONB 元素,实现追加效果
这两种写法都能达到和 MongoDB $addToSet 一致的效果,避免数组中出现重复值。
内容的提问来源于stack exchange,提问作者Asantamaura
相关产品推荐
相关产品推荐

