有人能告诉我为什么当我使用DataExplorer for CosmoDb DB时,我得到以下内容:
{
"id": "d502b51a-e70a-40f1-9285-3861880b8d90",
"Version": 1,
...
}
但是当我使用Robomongo时,我得到了:
{
"Version" : 1,
...
}
减去id?
由于
答案 0 :(得分:1)
我尝试重新编写您的方案,但一切正常。
Portal Data Explorer中的Mongo文档:
Robo 3T中的Mongo文档:
他们都有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;
}
}