Docs 菜单
Docs 主页
/ /
Atlas App Services
/

内部数据库使用

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_documentscollection中读取,但不能以任何方式对其进行修改。

如果Device Sync由于达到100 ( 000个不同步文档)限制而暂停,您有两个选择:

  • 终止并重新启用同步。

  • 请联系支持并请求暂时增加不同步的文档限制。

文档不同步的一个常见原因是在应用上下文之外添加或修改的数据。

考虑以下情况:

  1. 应用程序具有具有以下模式的petscollection:

    {
    "title": "Pet",
    "required": ["_id", "type", "name", "age"],
    "properties": {
    "_id": { "bsonType: "objectId" },
    "type": { "bsonType: "string" },
    "name": { "bsonType: "string" },
    "age": { "bsonType: "int" }
    }
    };
  2. 有人使用 MongoDB 驱动程序、MongoDB Compass 或在“系统”模式下运行的 Atlas Function,将文档直接添加到pets集合中。 该文档的age字段包含一个字符串,而不是数字,它与应用程序的模式不匹配。 MongoDB 本身并不强制执行应用程序的模式,因此它允许插入而不会出现警告或错误。

    {
    "_id": "5ae782e48f25b9dc5c51c4a5",
    "type": "dog",
    "name": "Fido",
    "age": "7"
    }
  3. 插入后,文档无法通过应用中的模式验证,并且无法同步。 App Store 在 unsynced_documents collection 中:

    {
    "_id": "6183021879247167daacd8dc",
    "appId": "6183021373247568dcdcd3ed",
    "documentId": "5ae782e48f25b9dc5c51c4a5",
    "ns": {
    "db": "myDatabase",
    "coll": "pets"
    },
    "reason": "invalid schema"
    }
总结
如果您的数据由 Sync 客户端使用,但也可以在 Atlas Device Sync 外部创建或修改,则必须确保这些创建和修改与collection上定义的对象模式匹配。对于失败的文档,您可以替换、更新或删除并重新添加每个文档。

后退

文档原像