Robomongo的CosmoDb看不到文档ID?

时间:2018-02-28 17:06:48

标签: mongodb azure-cosmosdb robo3t

有人能告诉我为什么当我使用DataExplorer for CosmoDb DB时,我得到以下内容:

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

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

{
    "Version" : 1,
    ...
}

减去id?

由于

2 个答案:

答案 0 :(得分:1)

我尝试重新编写您的方案,但一切正常。

Portal Data Explorer中的Mongo文档:

Render in Data Explorer

Robo 3T中的Mongo文档:

Render in Robo 3T

他们都有id属性。

您是否正在对Robomongo / Robo 3T进行预测?

答案 1 :(得分:0)

此刻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的需要正确实现_id$oid内部,而仅基于基于JSON id是必需的。因此,您需要在保存文档时添加属性(见下文),或使用正确的工具打开它,如Matias Quaranta建议,使用 Azure Storage Explorer 甚至数据浏览器以正确获取这两个协议。

此外,如果您使用系统创建文档并且想要使用BSON格式,则需要添加$ oid,例如在核心网中是这样的:

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;
    }
}