MongoDB c# -为不存在的元素获取BsonDocument
本文关键字:元素 获取 BsonDocument 不存在 MongoDB | 更新日期: 2023-09-27 18:01:30
我有一个BsonDocument b(假设它有FirstName, LastName, Age),你可以通过b["FirstName"]等方式访问它。
如果我尝试做b["asdfasdf"](当然不存在),而不是返回null,它错误的应用程序。什么是正确的方法来检查?我真的要试/接吗?
还有一个重载允许您提供默认值:
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"的项。