【问题标题】:CosmoDb with Robomongo cant see document id's?带有 Robomongo 的 Cosmos Db 看不到文档 ID?
【发布时间】:2018-08-08 15:40:01
【问题描述】:

谁能告诉我为什么当我使用 DataExplorer for CosmoDb DB 时,我得到以下信息:

{
    "id": "d502b51a-e70a-40f1-9285-3861880b8d90",
    "Version": 1,
    ... 
}

但是当我使用 Robomongo 时,我得到:

{
    "Version" : 1,
    ...
}

减去 id?

谢谢

【问题讨论】:

    标签: mongodb azure-cosmosdb robo3t


    【解决方案1】:

    我尝试重现您的场景,但一切正常。

    Portal Data Explorer 中的 Mongo 文档:

    Robo 3T 中的 Mongo 文档:

    它们都有id 属性。

    您是否在 Robomongo / Robo 3T 上应用投影?

    【讨论】:

    • 正确,所以按照您的操作,如果 API db 最初是为 MongoDB 设置的,我能够获得返回的 id。我正在使用的这个数据库是为 SQL 设置的,看起来我无法查看 id。哪种限制了我……叹息。
    • 我建议直接联系 [askcosmosdb@microsoft.com],因为他们可能会提供将您的 SQL API 数据库迁移到 Mongo API 数据库的选项。
    • @FarmBoy 如果是 SQL 帐户,可能想尝试使用面向 SQL api 的工具,例如 Storage Explorer。我相信 Robomongo 使用与 MongoDB API 帐户匹配的 MongoDB 有线协议。
    【解决方案2】:

    此时 cosmodb 分别工作 SQL API 和 Mongo API,每个都有不同的实现,SQL API 使用 JSON 和 Mongo 使用 BSON,你需要清楚这一点在创建文档时。

    如果您使用 基于 BSON 的工具(例如 Robo3t)创建文档,您将获得如下结果:

    {
        "_id": {
            "$oid": "5be0d98b9cdcce3c6ce0f6b8"
        },
        "name": "Name",
        "id": "5be0d98b9cdcce3c6ce0f6b8",
        ...
    }
    

    相反,如果您使用 基于 JSON 的(如数据资源管理器)创建文档,您将获得以下信息:

    {
        "name": "Name",
        "id": "6c5c05b4-dfce-32a5-0779-e30821e6c510",
        ...
    }
    

    如您所见,BSON-based 需要实现 _id 和内部 $oid 才能正常工作,而 JSON-based 只有 id必需的。因此,您需要在保存文档时添加属性(见下文)或使用正确的工具打开它,正如Matias Quaranta 推荐的那样,使用 Azure Storage Explorer 甚至 Data Explorer 正确获取这两种协议。

    另外,如果你使用系统创建文档,并且你想使用 BSON 格式,你需要添加 $oid,例如在 core net 中是这样的:

    public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
    {
        switch (memberName)
        {
            case "Id":
                serializationInfo = new BsonSerializationInfo("_id", new ObjectIdSerializer(), typeof(ObjectId));
                return true;
            case "Name":
                serializationInfo = new BsonSerializationInfo("name", new StringSerializer(), typeof(string));
                return true;
            default:
                serializationInfo = null;
                return false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 2018-05-07
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多