我有一个asp.Net/C#的WebAPI,我正在使用Mongodb。在更新特定文档之前,我需要检查文档中是否存在字段,如果没有将字段添加到文档中。但我不知道如何检查文档中是否存在字段。要添加字段我正在使用此代码:
var update = Bundle.Update.Set(b => b.followers, new List<User>());
int res = Bundle.UpdateOne(Bundle.Filter.Eq(b => b._id, id), update);
提前致谢。
我尝试使用类似的东西,但它返回null !!
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Exists("followers", false).ToBsonDocument();
var RetrievedData = Bundle.Collection().Find(filter).ToList();
答案 0 :(得分:0)
您可以尝试以下操作:
按以下方式使用“尝试/捕获”:
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
}
使用.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...
通过使用TryGetElement您还可以获取此元素:
BsonElement element; // it will contains found element if true
var exists = document.TryGetElement("fieldNameToCheck", out element); // returns true if element is found
希望有帮助