iOS Swift Couchbase Lite主键和类配置

问题描述 投票:1回答:1

[我正在浏览沙发沙发Lite,以便在我的下一个iOS应用中使用它。我现在已经创建了一个名为Surah的模型。肯定的是,我以后将有更多的模型类。

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

  • 如何在沙发床Lite中添加_id作为主键?
  • 随着我将有更多的课程,我将如何处理这些课程?当我创造MutableDocument,如何区分我的每个班级?
  • 正如我所看到的,我必须遍历我的每个项目以批量插入,对于大型数据集,这不会变慢吗?
  • 我如何将查询结果转换为大数据模型数组。 (在这种情况下为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)
                                            }
                                        }
ios swift couchbase couchbase-lite
1个回答
0
投票
  1. 不确定您所说的“主键”是什么意思。您总是可以找到一个文档通过其ID。包含它的字段的名称为Meta.id。该字段的值为mutableDoc.getId()。如您所知,您也可以在创建时明确设置ID
  2. Couchbase不存储类,它存储JSON文档。如果你拥有不同类型的文件(不同的内部结构,类似于不同的SQL表),为其提供类型字段并使用它在您的查询中
  3. 使用Database.inBatch()
  4. 您将任何JSON文档转换为对应的相同方法类:gson,Jackson,Moshi等
© www.soinside.com 2019 - 2024. All rights reserved.