我有一些字符串,我将随着时间的推移将它们连接到 couchbase 上的文档中。我用clojure做这个,代码很简单
;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。因为,1,2
不是一个有效的 json,couchbase UI 要么显示一个 base64 编码的值,要么它有时会显示无效的 json(即使从 memcache 和 api 返回了正确的值)。
从 couchbase 论坛我了解到这是预期的行为。我真的很想避免这种情况,并以有效的 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
)
更不用说我仍然不知道如何为其添加更多价值!
请指教!