所以我有一个BsonDocument b(假设它有FirstName,LastName,Age),您可以访问它作为b [“FirstName”]等...
如果我尝试做b [“asdfasdf”](当然不存在),而不是返回null,它会使应用程序出错。什么是正确的检查方法?我真的需要尝试一下吗?
答案 0 :(得分:18)
还有一个重载,允许您提供默认值:
BsonDocument document;
var firstName = (string) document["FirstName", null];
// or
var firstName = (string) document["FirstName", "N/A"];
使用Contains稍微方便一点,当你想要做的就是用默认值替换缺失值时。
修改: since the 2.0.1版本,已弃用,GetValue
:
var firstName = document.GetValue("FirstName", new BsonString(string.Empty)).AsString;
答案 1 :(得分:6)
尝试使用Contains方法:
var b = new BsonDocument();
var exists = b.Contains("asdfasdf");
答案 2 :(得分:3)
Robert的答案更新,使用C#2.0驱动程序的正确语法是:
var firstName = report.GetValue("FirstName", null);
答案 3 :(得分:0)
您可以使用:
var GoodItems = Query.Exists("FirstName");
而不是查询
People.Find(GoodItems);
这样你只能获得定义了“FirstName”的项目。
答案 4 :(得分:0)
使用C#驱动程序版本2,可能不足以检查字段是否存在。这一行:
var firstName = report.GetValue("FirstName", null);
如果在数据库中FirstName实际为null,将返回一个BsonNull对象,而实际上你想获得一个字符串。 在一行代码中考虑这一点的一种方法是:
BsonDocument document;
string firstName = ((Func<BsonDocument, string>)(d => { var v = d.GetValue("FirstName", null); return v.IsBsonNull ? null : v.AsString; }))(document);