Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以json格式在couchbase中存储csv_Json_Csv_Couchbase - Fatal编程技术网

以json格式在couchbase中存储csv

以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” 获

我有一些字符串,我将随着时间的推移连接到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”
  • 获取值:
    1,2
  • 这很好,一切都很好。但这个问题实际上并不是关于前置,而是以一种仍然是有效json的方式前置到couchbase。因为,
    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”字符串(删除一些字符,然后添加新字符以使其有效)。