CosmoDb с Robomongo не могут видеть идентификаторы документов?
Может кто-нибудь сказать мне, почему, когда я использую DataExplorer для CosmoDb DB, я получаю следующее:
{
"id": "d502b51a-e70a-40f1-9285-3861880b8d90",
"Version": 1,
...
}
Но когда я использую Robomongo, я получаю:
{
"Version" : 1,
...
}
минус идентификатор?
Спасибо
2 ответа
Я попытался воспроизвести ваш сценарий, но все заработало правильно.
Документ Mongo в Portal Data Explorer:
Документ Монго в Robo 3T:
У них обоих есть id
имущество.
Применяете ли вы проекции на Robomongo / Robo 3T?
На данный момент cosmodb работает отдельно от SQL API и Mongo API, каждая из которых имеет различную реализацию, SQL API использует JSON, а Mongo использует BSON, вы должны уточнить это при создании документа.
Если вы создадите документ с помощью инструмента на основе BSON, например, Robo3t, вы получите что-то вроде этого:
{
"_id": {
"$oid": "5be0d98b9cdcce3c6ce0f6b8"
},
"name": "Name",
"id": "5be0d98b9cdcce3c6ce0f6b8",
...
}
Вместо этого, если вы создадите документ с помощью JSON, например, Data Explorer, вы получите следующее:
{
"name": "Name",
"id": "6c5c05b4-dfce-32a5-0779-e30821e6c510",
...
}
Как видите, для BSON необходимо _id
и внутри $oid
быть реализованным, чтобы работать правильно, в то время как только на основе JSON 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;
}
}