内部数据库使用
Atlas App Services 使用链接的 MongoDB Atlas cluster 来托管某些内部操作。通常,您无需了解这些操作即可使用 App Services。
系统生成的集群用户
App Services会自动为链接到集群的每个应用创建一个 MongoDB用户。 这些用户仅供内部使用,无法编辑或手动删除。 如果删除应用,则关联的用户也会被删除。
App Services 生成的用户具有以下形式的名称:
mongodb-realm-<your app id>
事务锁
Atlas App Services连接到标准MongoDB Atlas集群,这意味着您可以使用其他工具(例如mongosh shell或MongoDB Compass )直接连接到链接的集群。 使用其他工具从关联集群读取数据时,没有特殊注意事项。
运行更新操作时, App Services会临时向文档添加保留字段_id__baas_transaction
。 成功更新文档后, App Services会删除此字段。 如果要使用其他工具修改集合中的数据,请确保在进行更改之前$unset此字段。
例如,如果您使用mongosh shell 更新产品集合中的文档,您的命令可能类似于以下代码:
db.products.update( { sku: "unknown" }, { $unset: { _id__baas_transaction: "" } } )
未同步的文档
如果同步集合中的文档不符合集合的模式,则无法同步到客户端应用程序。 如果有100 、 000或更多未同步的文档, App Services将停止与应用同步。
App Services 将有关未同步文档的信息存储在__realm_sync.unsynced_documents
集合中。
重要
您可以从__realm_sync.unsynced_documents
collection中读取,但不能以任何方式对其进行修改。
如果Device Sync由于达到100 ( 000个不同步文档)限制而暂停,您有两个选择:
请联系支持并请求暂时增加不同步的文档限制。
文档不同步的一个常见原因是在应用上下文之外添加或修改的数据。
考虑以下情况:
应用程序具有具有以下模式的
pets
collection:{ "title": "Pet", "required": ["_id", "type", "name", "age"], "properties": { "_id": { "bsonType: "objectId" }, "type": { "bsonType: "string" }, "name": { "bsonType: "string" }, "age": { "bsonType: "int" } } }; 有人使用 MongoDB 驱动程序、MongoDB Compass 或在“系统”模式下运行的 Atlas Function,将文档直接添加到
pets
集合中。 该文档的age
字段包含一个字符串,而不是数字,它与应用程序的模式不匹配。 MongoDB 本身并不强制执行应用程序的模式,因此它允许插入而不会出现警告或错误。{ "_id": "5ae782e48f25b9dc5c51c4a5", "type": "dog", "name": "Fido", "age": "7" } 插入后,文档无法通过应用中的模式验证,并且无法同步。 App Store 在
unsynced_documents
collection 中:{ "_id": "6183021879247167daacd8dc", "appId": "6183021373247568dcdcd3ed", "documentId": "5ae782e48f25b9dc5c51c4a5", "ns": { "db": "myDatabase", "coll": "pets" }, "reason": "invalid schema" }
- 总结
- 如果您的数据由 Sync 客户端使用,但也可以在 Atlas Device Sync 外部创建或修改,则必须确保这些创建和修改与collection上定义的对象模式匹配。对于失败的文档,您可以替换、更新或删除并重新添加每个文档。