MongoDB C # - Получение BsonDocument для элемента, который не существует - PullRequest
6 голосов
/ 08 июля 2011

Итак, у меня есть BsonDocument b (скажем, он имеет FirstName, LastName, Age), к которому вы можете получить доступ как b ["FirstName"] и т. Д.«asdfasdf»] (который, конечно, не существует), вместо того, чтобы возвращать ноль, он выдает ошибку в приложении.Как правильно проверить?Я действительно должен сделать попытку / поймать?

Ответы [ 5 ]

18 голосов
/ 09 июля 2011

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

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;
6 голосов
/ 08 июля 2011

Попробуйте метод Contains:

var b = new BsonDocument();
var exists = b.Contains("asdfasdf");
3 голосов
/ 07 сентября 2015

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

var firstName = report.GetValue("FirstName", null);
0 голосов
/ 28 октября 2015

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

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

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

BsonDocument document;
string firstName = ((Func<BsonDocument, string>)(d => { var v = d.GetValue("FirstName", null); return v.IsBsonNull ? null : v.AsString; }))(document);
0 голосов
/ 20 марта 2013

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

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

и чем запрос

People.Find(GoodItems);

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

...