首页 > 解决方案 > iOS Swift Couchbase Lite 主键和类配置

问题描述

我正在通过 couchbase-lite 在我的下一个 iOS 应用程序中使用它。我现在创建了一个名为 Surah 的模型。当然,我以后会有更多的模型课。

基本上我在这里有四个问题。

数据库查询代码

let surahs = try JSONDecoder().decode([Surah].self, from: data!)

                                        DispatchQueue.global(qos: .background).async {
                                            //background code
                                            do {
                                                if let db = App.shared.database {
                                                    try db.inBatch {
                                                        for item in surahs {
                                                            let doc = MutableDocument(data: item.dictionary)
                                                            doc.setString("users", forKey: "type")
                                                            doc.setValue(Keys._id, forKey: item._id)
//                                                            doc.setValue(Keys.englishName, forKey: item.englishName)
                                                            try db.saveDocument(doc)

                                                            let index = IndexBuilder.valueIndex(items:
                                                                ValueIndexItem.expression(Expression.property("_id")), ValueIndexItem.expression(Expression.property("type")))
                                                            try db.createIndex(index, withName: "TypeNameIndex")
                                                            print("saved user document \(doc.string(forKey: "englishName"))")
                                                        }
                                                    }
                                                }
                                            } catch let error {
                                                DispatchQueue.main.async {
                                                    seal.reject(error)
                                                }
                                            }
                                            DispatchQueue.main.async {
                                                seal.fulfill(surahs)
                                            }
                                        }

标签: iosswiftcouchbasecouchbase-lite

解决方案


  1. 不确定“主键”是什么意思。您始终可以通过 id 找到文档。包含它的字段的名称是Meta.id。该字段的值为mutableDoc.getId()。正如您所注意到的,您还可以在创建时显式设置 id
  2. Couchbase 不存储类,它存储 JSON 文档。如果你有不同类型的文档(不同的内部结构,类似于不同的 SQL 表),给它们一个类型字段并在你的查询中使用它
  3. 利用Database.inBatch()
  4. 与将任何 JSON 文档转换为相应类的方式相同:gson、Jackson、Moshi 等

推荐阅读