MongoDB c# -为不存在的元素获取BsonDocument

本文关键字:元素 获取 BsonDocument 不存在 MongoDB | 更新日期: 2023-09-27 18:01:30

我有一个BsonDocument b(假设它有FirstName, LastName, Age),你可以通过b["FirstName"]等方式访问它。

如果我尝试做b["asdfasdf"](当然不存在),而不是返回null,它错误的应用程序。什么是正确的方法来检查?我真的要试/接吗?

MongoDB c# -为不存在的元素获取BsonDocument

还有一个重载允许您提供默认值:

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

当你想做的只是用默认值替换缺失值时,它比使用Contains稍微方便一些。

Edit:自2.0.1版本以来,它已被弃用,取而代之的是GetValue:

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

尝试Contains方法:

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

对Robert的回答进行更新,使用c# 2.0驱动程序的正确语法是:

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

在c#驱动程序版本2中,检查字段是否存在可能还不够。线:

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

您可以使用:

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

and than query

People.Find(GoodItems);

这样,您将只获得定义了"FirstName"的项。