2011-07-08 21 views
3

因此,我有一个BsonDocument b(假设它有FirstName,LastName,Age),你可以作为b [“FirstName”]访问等等......MongoDB C# - 为不存在的元素获取BsonDocument

如果我试图做b [“asdfasdf”](当然不存在),而不是返回null,它会出错应用程序。什么是正确的方法来检查?我真的必须做一个尝试/抓住?

回答

14

还有,让你提供一个默认值的重载:

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

这是稍微更方便的是使用包含当所有你想做的事用缺省值替换缺少的值。

编辑:since the 2.0.1版本,它已经支持GetValue弃用:

var firstName = document.GetValue("FirstName", new BsonString(string.Empty)).AsString; 
4

尝试包含方法:

var b = new BsonDocument(); 
var exists = b.Contains("asdfasdf"); 
0

您可以使用:

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

,比查询

People.Find(GoodItems); 

这样你只会得到物品at有“FirstName”定义。

1

罗伯特的回答更新,使用C#2.0驱动程序正确的语法是:

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

用C#驱动程序版本2,它可能是不够的检查场的存在。行:

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

将返回BsonNull对象,如果名字是在数据库实际上空的时候,其实你想获得一个字符串。 将单线代码考虑在内的一种方法是:

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