gpt4 book ai didi

android - 使用 cblite 将数据插入 Couchbase lite,JSON 文件中每行一个文档 - Kotlin

转载 作者:行者123 更新时间:2023-12-04 17:15:57 24 4
gpt4 key购买 nike

我正在使用 Couchbase lite,我想从 json 文件准备一个预构建的数据库。每次我导入包含 12 个键的数组的文件时,该文件有 100 行,每行都是一个数组。

Cblite 将所有文件导入到单个文档中,这不允许我使用基于键的文档内容,因为所有 12 个键都重复了 100 次。但我发现我可以将单个文件导入多个文档(每行/数组)并成为一个单独的文档。

但我无法使用 cblite 中提供的命令来执行此操作,我从 cblite 收到错误消息,包括(无法解析 json)

DESTINATION : Database path, replication URL, or JSON file path:
*.cblite2 : Copies local database file, and assigns new UUID to target
*.cblite2 : With --replicate flag, runs local replication [EE]
ws://* : Networked replication
wss://* : Networked replication, with TLS
*.json : Imports/exports JSON file (one doc per line)
*/ : Imports/exports directory of JSON files (one per doc)

我可以重新排列 json 文件以适合……但我不能为每个数组创建一个文件。

数组看起来像那样

{"_id":13,"id":"51333591918","owner":"126542062@N08","secret":"16f1758279","server":"65535","farm":66,"title":"dreamland","ispublic":1,"isfriend":0,"isfamily":0,"url_s":"https://live.staticflickr.com/65535/51333591918_16f1758279_m.jpg","height_s":148,"width_s":240}
{"_id":14,"id":"51333156717","owner":"97978797@N03","secret":"82f0fb71aa","server":"65535","farm":66,"title":"Tagpfauenauge","ispublic":1,"isfriend":0,"isfamily":0,"url_s":"https://live.staticflickr.com/65535/51333156717_82f0fb71aa_m.jpg","height_s":160,"width_s":240}
cblite -tool version: cblite tool 2.8 EE
Couchbase lite version : 2.8.6
Error: NullPointerException

我尝试了几个文件。一个 JSON 是公共(public)文件(我也将其用作测试)是 flickr json 响应 Flickr Photos Json File

我还使用了公司的文件,这些文件是 POS 的项目。

我什至尝试手动更改 json 文件的结构。但都导致相同的结果......(将所有数组放在一个文档中)

在数据库查询中我使用了这段代码

 val query = QueryBuilder
.select(
SelectResult.expression(Meta.id),
SelectResult.property("owner"),
SelectResult.property("secret"),
SelectResult.property("server"),
SelectResult.property("farm"),
SelectResult.property("title"),
SelectResult.property("ispublic"),
SelectResult.property("isfriend"),
SelectResult.property("isfamily"),
SelectResult.property("url_s"),
SelectResult.property("height_s"),
SelectResult.property("width_s"),
)
.from(DataSource.database(database))

val result = query.execute().allResults()

for (rs in result) {
// val doc = database.getDocument(photo.id)
val id = rs.getString("id")
val owner = rs.getString("owner")
val secret = rs.getString("secret")
val server = rs.getString("server")
val farm = rs.getInt("farm")
val title = rs.getString("title")
val ispublic = rs.getInt("ispublic")
val isfriend = rs.getInt("isfriend")
val isfamily = rs.getInt("isfamily")
val url_s = rs.getString("url_s")
val height_s = rs.getInt("height_s")
val width_s = rs.getInt("width_s")

photoList.add(
photo(
id!!,
owner!!,
secret!!,
server!!,
farm,
title!!,
ispublic,
isfriend,
isfamily,
url_s!!,
height_s,
width_s
)
)

我注意到在 Kotlin 中 SelectResult.all() 的选项没有带来任何东西,我必须一个一个地指定要获取的键。但这不是问题。

我经常设法在控制台中打印整个文档,但我永远无法使用其中的任何键。总是将 NullPointer 作为错误获取。

我仍在 couchbase 上学习,我想了解 N1QL,不幸的是我很少找到 Kotlin 的东西

有什么帮助吗?

最佳答案

请参阅 GitHub 中的示例存储库: https://github.com/biozal/cbmobile-split-data-example

我假设 photo 数组中作为 photos 对象子对象的所有记录都是您想要保存到数据库中的内容,并且您希望每个对象都是一个新文档。

鉴于此,我编写了一个非常简单的 shell 脚本(使用“bash”)执行以下操作:

  • 获取文档中的项目数

  • 遍历我需要为其创建文档的项目数

  • 使用开源jq命令(https://github.com/stedolan/jq)获取内容并保存到名为json的变量中

  • 每个文档都需要一个唯一的键,所以我为此使用了 id 字段并将其从 json 中提取

  • 最后我调用了 cblite 工具并让它根据我为项目提取的 id 和它的 json 值创建文档

此查询的屏幕截图名为 query-database.png。为了查询我做了以下事情:

./cblite sampleDb.cblite2
query --limit 10 ["=", [".owner"], "138459774@N07"]

该查询将返回值所在的文档。

关于android - 使用 cblite 将数据插入 Couchbase lite,JSON 文件中每行一个文档 - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68708256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com