以json格式在couchbase中存储csv
我有一些字符串,我将随着时间的推移连接到couchbase上的文档。 我用,代码很简单以json格式在couchbase中存储csv,json,csv,couchbase,Json,Csv,Couchbase,我有一些字符串,我将随着时间的推移连接到couchbase上的文档。 我用,代码很简单 ;create document when new (cbc/add client key value) ;append when document exists (c/async-prepend client key (str "," value) (c/get-cas-id client key) 这一切都很好。我可以大致概述我想讨论的问题的步骤,如下所示 增值:“1” 获取值:1 附加值“,2” 获
;create document when new
(cbc/add client key value)
;append when document exists
(c/async-prepend client key (str "," value) (c/get-cas-id client key)
这一切都很好。我可以大致概述我想讨论的问题的步骤,如下所示
1
1,2
1,2
不是有效的json,couchbase UI显示base64编码的值,或者有时显示无效的json(即使正确的值是从memcache和api返回的)
我了解到这是预期的行为。我真的希望避免这种情况,并以有效的json格式存储值(并附加值)
我可以做类似的事情
{ "vals" : [1,2] }
并且每次都附加到vals
,但是现在,如果我附加3
,它将变成[1,2],3
,这同样不是一个有效的json
我不想获取值,删除结束括号,添加新值,结束括号,然后再次保存,因为(1)这违背了附加的目的,(2)文档越来越大,每次读取所有值以添加新值是没有效率的
最后,我的问题归结为两件事:
1) 数据可以保持原样吗?我从api获得了正确的数据。不管怎样,ui无法显示数据或显示base64编码的数据,因此我无法编辑它。。这是唯一的缺点(我为什么还要从UI编辑数据?)
2) 如果有一种方法可以解决这个问题,那么有没有一种方法可以将数据存储在每次都有效的json中,这样它就会显示在UI和API中。-这样做的缺点是,现在文档要大得多,需要进行更多的处理才能获得所需的数据({“value”:[1,2]}
,而不是1,2
)
更不用说我仍然不知道如何为它添加更多的值
请建议 很确定这是没有办法的。使用append和prepend,您将破坏json。它的缺点是,您将无法使用视图查询数据-该功能需要有效的json。因此,只要您能够通过键值检索数据,couchbase服务器中的非json数据就没有问题。我不知道它是否适合您,但您可以尝试这样做: 在数据库中存储一些有效的JSON文档,其中包含一个指向该csv值的键的属性。例如:
doc:{“doc.id”:“some\u id”,“doc.type”:“some\u type”,“doc.value”:“value:for:doc\u some\u id”}
然后将csv数据附加/前置到该键值:for:doc\u some\u id
,这样您就可以得到:
“key”:“value:for:doc\u some\u id”,“value”:“1,2,3…”
然后在emit函数中获得正确的json文档,然后获取保存值的键,然后通过该键获取值。有关整理视图的信息,请参见此。我从未使用过它们,但我认为要实现您想要的功能,请尝试遵循该示例中的步骤。每次写入文档时,您都在创建文档的新版本。它不是在磁盘上“附加”的,所以每次都不能生成有效的JSON(如果这是你的最终目标的话)对你的代码来说真的没有好处。@wiredparie-你能扩展一下吗?即使它正在用新数据重新创建一个新文档,我仍然没有在附加之前获取整个内容,因此这确实节省了我大量的计算量。CouchDB/Base不是这样工作的。您需要获取整个文档并保存整个文档。我不知道你所说的“计算”是什么意思。你可以在重新保存之前以任何方式操作“JSON”字符串(删除一些字符,然后添加新字符以使其有效)。