Couchbase迁移插入报错:Cannot INSERT non-string key Missing field _k
错误原因分析
1. 字段大小写不匹配
N1QL对标识符(包括字段名)大小写敏感。你的INSERT语句中指定KEY _k,但SELECT子句里返回的是_K(大写K),数据库无法匹配到_k字段,因此触发"Missing field or index _k"的缺失值错误。
2. 缺少插入的文档内容
INSERT语句声明了VALUE _v,但SELECT部分仅返回了修改后的key和ttl,未包含原文档_v的数据,执行时会缺失VALUE部分的必要内容。
解决方法
修正后的完整查询语句如下:
INSERT INTO `bucket` (KEY _k, VALUE _v, OPTIONS {"expiration": ttl}) SELECT REPLACE(META(_v).id, "2_", "3_", 1) AS _k, _v, META(_v).expiration AS ttl FROM `bucket` _v WHERE _v._class="classname" AND META(_v).id LIKE "2_%";
关键修正点:
- 将SELECT中的
_K改为_k,与INSERT中的KEY字段名保持大小写一致。 - 在SELECT中添加
_v,作为INSERT的VALUE来源,确保插入的文档内容完整。 - 统一使用
META(_v).id替代META().id,明确指定从_v别名的文档获取元数据,避免歧义。
内容的提问来源于stack exchange,提问作者SANN3
相关产品推荐
相关产品推荐

