Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
iOS Swift Couchbase Lite主键和类配置_Ios_Swift_Couchbase_Couchbase Lite - Fatal编程技术网

iOS Swift Couchbase Lite主键和类配置

iOS Swift Couchbase Lite主键和类配置,ios,swift,couchbase,couchbase-lite,Ios,Swift,Couchbase,Couchbase Lite,我正在通过couchbase lite在我的下一个iOS应用程序中使用它。我现在已经创建了一个名为Surah的模型。当然,我以后会有更多的模型课 基本上我这里有四个问题 如何在couchbase lite中添加_id作为主键 因为我将有更多的课程,我将如何处理这些?因为我在创造 MutableDocument,这将如何区分我的每个类 正如我所看到的,我必须迭代我的每一项以进行批插入,对于大型数据集来说,这不会变得很慢吗 如何将具有大数据的查询结果转换为模型类数组。(在本例中为Surah阵列)

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

基本上我这里有四个问题

  • 如何在couchbase lite中添加_id作为主键
  • 因为我将有更多的课程,我将如何处理这些?因为我在创造 MutableDocument,这将如何区分我的每个类
  • 正如我所看到的,我必须迭代我的每一项以进行批插入,对于大型数据集来说,这不会变得很慢吗
  • 如何将具有大数据的查询结果转换为模型类数组。(在本例中为Surah阵列)

    Surah类:可解码{

    enum Keys: String, CodingKey {
        case _id
        case index
        case englishName
        case englishMeaning
        case name
        case place
        case count
    }
    
    var _id = ""
    var index = 1
    var page = 1
    var numberOfAyahs = 1
    var englishName = ""
    var englishMeaning = ""
    var name = ""
    var place = ""
    var isFavorite = false
    
    var dictionary: [String: Any] {
        return ["_id": _id, "index": index, "page": page]
    }
    
    required init() {}
    
    required init(_id: String, index: Int, name: String, englishName: String, englishMeaning: String, place: String, count: Int) {
        self._id = _id
        self.index = index
        self.name = name
        self.englishName = englishName
        self.englishMeaning = englishMeaning
        self.place = place
        self.numberOfAyahs = count
    }
    
    
    required convenience init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: Keys.self) // defining our (keyed) container
        let _id: String = try container.decode(String.self, forKey: ._id)
        let index: Int = try container.decode(Int.self, forKey: .index)
        let name: String = try container.decode(String.self, forKey: .name)
        let englishName: String = try container.decode(String.self, forKey: .englishName)
        let englishMeaning: String = try container.decode(String.self, forKey: .englishMeaning)
        let place: String = try container.decode(String.self, forKey: .place)
        let count: Int = try container.decode(Int.self, forKey: .count)
        self.init(_id: _id, index: index, name: name, englishName: englishName, englishMeaning: englishMeaning, place: place, count: count)
    }}
    
数据库查询代码

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)
                                            }
                                        }
  • 不知道你说的“主键”是什么意思。你总能找到一个文档 通过其id。包含它的字段的名称是
    Meta.id
    。 该字段的值是
    mutableDoc.getId()
    也可以在创建时显式设置id
  • Couchbase不存储类,它存储JSON文档 具有不同类型的文件(不同的内部结构, 类似于不同的SQL表),给它们一个类型字段并使用 它在你的查询中
  • 使用
    Database.inBatch()
  • 与将任何JSON文档转换为相应的 班级:格森、杰克逊、莫西等
  • 不知道你说的“主键”是什么意思。你总能找到一个文档 通过其id。包含它的字段的名称是
    Meta.id
    。 该字段的值是
    mutableDoc.getId()
    也可以在创建时显式设置id
  • Couchbase不存储类,它存储JSON文档 具有不同类型的文件(不同的内部结构, 类似于不同的SQL表),给它们一个类型字段并使用 它在你的查询中
  • 使用
    Database.inBatch()
  • 与将任何JSON文档转换为相应的 班级:格森、杰克逊、莫西等

  • 好的,得到主键部分。我这样添加主键…让doc=MutableDocument(id:item.\u id,data:item.dictionary)好的,得到主键部分。我这样添加主键…让doc=MutableDocument(id:item.\u id,data:item.dictionary)