MongoDB 使用 C# 的最后一个值或最大值

MongoDB Last value or Max value using C#

我在从 MongoDB table(集合)中检索最新值时遇到问题。

我的 table 没有 class 映射。由于动态行为,我无法为我的 table 创建 class。

例如 MyTable 有 4 列,下面提到的是 table 和值。

Id , DateTime,  Column1, Column2

1     somTime     1         1
2     somTime     2         2
3     somTime     3  

由于用户要求,table 是动态的,用户可以创建任意数量的列,并且可以分别向这些列中插入值。 在此我想获得插入 Column2 的最新值,即 2。

我的代码如下所示。

var maxDateTime = (from collect in document.AsQueryable()
                   select collect["dateTime"]).Max();

var qLatestValue = Query.EQ("DateTime", maxDateTime);
value = result["Column1"];   
// this works fine since the Column1 exists

value = result["Column2"];

// this code is giving exception

检索到的文档中不存在 Column2。因此它抛出 keynotFound 异常。

如何获取这个Column2的最新值? 任何人都可以帮忙吗?

当您检索 maxDateTime 值时,您检索的是集合中的最新值,但此文档可能不包含 Column2

您需要在 maxDateTime 查询中包含一个 Where 子句,任何只获取 maxDateTime 存在 Column2 键的文档。

例如

Query.Exists("Column2")

您的 result 文档中没有名为 Column2 的文件。解决方案是通过

获得价值

方式一:

result["Column2", BsonNull.Value]

方式二:

result.GetValue("Column2", BsonNull.Value);

方式三:

BsonValue value;
var hasValue = doc.TryGetValue("Column2");

抱歉回复晚了。下面的代码解决了我的问题。

var maxDateTime =(from a in document.AsQueryable() where c[columnName] != BsonNull.Value select c["DateTime"]).Max();

var qlatest= Query.EQ("DateTime", maxDateTime);
var result = document.FindOne(qlatest);
value = result[columnName];