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