Как проверить, существует ли поле в конкретном документе Mongodb с использованием C #? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть WebAPI с asp.Net/C#, и я использую Mongodb.Прежде чем обновлять конкретный документ, мне нужно проверить, существует ли поле в документе или нет, и добавить его в документ.Но Я не знаю, как я могу проверить наличие поля в документе .Чтобы добавить поле, я использую этот код:

var update = Bundle.Update.Set(b => b.followers, new List<User>());
int res = Bundle.UpdateOne(Bundle.Filter.Eq(b => b._id, id), update);

Заранее спасибо.

Я пытался использовать что-то подобное, но оно возвращает ноль !!

var builder = Builders<BsonDocument>.Filter;               
var filter = builder.Exists("followers", false).ToBsonDocument();
var RetrievedData = Bundle.Collection().Find(filter).ToList();

1 Ответ

0 голосов
/ 11 марта 2019

Можно попробовать следующее:

  1. Использовать Try / Catch следующим образом:

    var document = Bundle.Collection().Find(filter); // here is your BsonDocument
    try
       {
          document["fieldNameToCheck"] // if field doesn`t exist it throws KeyNotFoundException. If there are nested objects just follow the pattern: document["fieldName"]["fieldNestedToCheck"]
       }
    catch (Exception ex) when (ex is KeyNotFoundException)
       {
          // your logic for "the field wasn`t found in the document" case
       } 
    
  2. Использовать .Contains (), какследует:

    var exists = document.Contains("fieldNameToCheck");// if field exists it returns true
    // If you need to check the nested fields, you can do as follows:
    var nestedExists = document["fieldName"].ToBsonDocument().Contains("fieldNameToCheck"); // or:
    var nestedExists = document["fieldName"]["nestedFieldNameNextLevel"].ToBsonDocument().Contains("fieldNameToCheck");  // and so on...      
    
  3. И с помощью TryGetElement вы можете дополнительно получить этот элемент:

    BsonElement element; // it will contain found element if true for next line
    var exists =  document.TryGetElement("fieldNameToCheck", out element); // returns true if element is found
    

Надеюсь, что это помогло

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...