MongoDB С# – получение BsonDocument для несуществующего элемента

Итак, у меня есть BsonDocument b (скажем, у него есть имя, фамилия, возраст), к которому вы можете получить доступ как b["FirstName"] и т. д.

Если я попытаюсь выполнить b["asdfasdf"] (которого, конечно же, не существует), вместо того, чтобы возвращать значение null, приложение выдаст ошибку. Как правильно проверить? Мне действительно нужно попробовать/поймать?


person googlesearchsentmehere    schedule 08.07.2011    source источник


Ответы (5)


Существует также перегрузка, позволяющая указать значение по умолчанию:

BsonDocument document;
var firstName = (string) document["FirstName", null];
// or
var firstName = (string) document["FirstName", "N/A"];

что немного удобнее, чем использование Contains, когда все, что вы хотите сделать, это заменить отсутствующее значение значением по умолчанию.

Изменить: начиная с версии 2.0.1 , он устарел в пользу GetValue:

var firstName = document.GetValue("FirstName", new BsonString(string.Empty)).AsString;
person Robert Stam    schedule 09.07.2011

Попробуйте метод Содержит:

var b = new BsonDocument();
var exists = b.Contains("asdfasdf");
person Bryan Migliorisi    schedule 08.07.2011

Обновление ответа Роберта, правильный синтаксис с использованием драйвера С# 2.0:

var firstName = report.GetValue("FirstName", null);
person Philip Bergström    schedule 07.09.2015

Ты можешь использовать:

var GoodItems = Query.Exists("FirstName");

и чем запрос

People.Find(GoodItems);

Таким образом, вы получите только те элементы, для которых определено «Имя».

person user1553825    schedule 20.03.2013

При использовании драйвера C# версии 2 проверки существования поля может быть недостаточно. Линия:

var firstName = report.GetValue("FirstName", null);

вернет объект BsonNull, если FirstName на самом деле имеет значение null в базе данных, тогда как на самом деле вы хотите получить строку. Один из способов учесть это в однострочном коде:

BsonDocument document;
string firstName = ((Func<BsonDocument, string>)(d => { var v = d.GetValue("FirstName", null); return v.IsBsonNull ? null : v.AsString; }))(document);
person Paul    schedule 28.10.2015