Как проверить, существует ли ключ в BsonDocument или не используется драйвер Mongodb C#? - PullRequest
0 голосов
/ 16 января 2020

Я получаю данные (BsonDocument) от mongodb, используя драйвер C#, например:

{ 
 "_id":ObjectId("5c8730688a247070ca5e4a15"),
 "visitorEmail":"UnRegistered",
 "visitorName":"Guest040704",
 "agentEmail":"salman@blauda.com",
 "sessionid":"5c86e0f88a247070ca5e48e6",
 "createdOn":"2019-03-12T04:07:04.455Z",
 "state":3,
 "messages":[ 

  ],
"messageReadCount":0,
"lastMessage":{ 
   "_id":ObjectId("5c8730688a247070ca5e4a16"),
    "from":"MEHAK",
    "to":"Guest040704",
    "body":"Hello.. How may i Help You ?",
    "cid":ObjectId("5c8730688a247070ca5e4a15"),
    "date":"2019-03-12T04:07:04.455Z",
    "type":"Agents",
     "attachment":false,
     "filename":null
   },
 "entertained":true,
 "endingDate":"2020-01-15T05:47:37.170Z"
}

Теперь я хочу проверить, существует ли в этом документе ключ "assign_to" или нет. Итак, я попробовал это:

convObject.TryGetValue("assigned_to", out isAssignedToExist);
Console.WriteLine("is assigned to ---- : "+isAssignedToExist);

Я получаю такую ​​ошибку вместо результата, независимо от того, существует ключ или нет:

ErorrSystem.Collections.Generic.KeyNotFoundException: Element 'assigned_to' not found.at 
MongoDB.Bson.RawBsonDocument.GetValue(String name) at 
sqs_processor.QueueService.ExecuteAsync(CancellationToken stoppingToken) in 
D:\OfficeProjects\beelinksanalytics\Services\queueService.cs:line 100

1 Ответ

1 голос
/ 16 января 2020

Используйте Contains(string), чтобы узнать, существует ли ключ.

bool assignedToExists = convObject.Contains("assigned_to")

Ваша трассировка стека также указывает, что вы использовали GetValue, а не TryGetValue, как подсказывает ваш вопрос .

TryGetValue(string, out BsonValue) возвращает логическое значение, которое указывает, было ли извлечение успешным (IE: ключ существует), и значение присваивается переменной out

Это, конечно, можно упростить, я расширил код для многословия.

bool assignedToExists = convObject.TryGetValue("assigned_to", out BsonValue assignedtoValue);

if (assignedToExists)
{
    Console.WriteLine("Assigned to exists, value is {0}", assignedToValue);
}
...