我是 MongoDB 以及 MongoDB Realm Sync 的新手。我正在关注Realm Sync 教程和Realm 数据模型文档,但我想了解更多信息,因此我调整了 Atlas 集合结构,如下所示。
Projects > Tasks // i.e. tasks is a sub-collection in each project.
我不知道如何提出可以支持 Atlas 子集合的 Realm Sync Schema。我想出的最好的是一个模式,其中Task
s 被建模为Project
. 但是,我担心对于有很多任务的项目来说,这可能会达到 16MB(虽然很多!)的文档限制。
{
"bsonType": "object",
"properties": {
"_id": {
"bsonType": "objectId"
},
"_partition": {
"bsonType": "string"
},
"name": {
"bsonType": "string"
},
"tasks": {
"bsonType": "array",
"items": {
"bsonType": "object",
"title": "Task",
"properties": {
"name": {
"bsonType": "string"
},
"status": {
"bsonType": "string"
}
}
}
}
},
"required": [
"_id",
"_partition",
"name",
],
"title": "Project"
}
期待如何以正确的方式对子集合进行建模。
编辑
这是我的客户端领域模型。
import Foundation
import RealmSwift
class Project: Object {
@objc dynamic var _id: String = ObjectId.generate().stringValue
@objc dynamic var _partition: String = "" // user.id
@objc dynamic var name: String = ""
var tasks = RealmSwift.List<Task>()
override static func primaryKey() -> String? {
return "_id"
}
}
class Task: EmbeddedObject {
@objc dynamic var name: String = ""
@objc dynamic var status: String = "Pending"
}
就 CRUD 操作而言,我只创建一个新项目并读取现有项目如下。
// Read projects
realm.objects(Project.self).forEach { (project) in
// Access fields
}
// Create a new project
try! realm.write {
realm.add(project)
}