MongoDB C# - 获取不存在的Element的BsonDocument

时间:2011-07-08 18:29:51

标签: c# mongodb element exists

所以我有一个BsonDocument b(假设它有FirstName,LastName,Age),您可以访问它作为b [“FirstName”]等...

如果我尝试做b [“asdfasdf”](当然不存在),而不是返回null,它会使应用程序出错。什么是正确的检查方法?我真的需要尝试一下吗?

5 个答案:

答案 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);