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

时间:2015-03-19 12:12:53

标签: mongodb c#-4.0

我在从MongoDB表(Collection)中检索最新值时遇到问题。

我的表没有映射类。由于动态行为,我无法为我的表创建一个类。

对于Eg MyTable下面提到的4列是表和值。

Id , DateTime,  Column1, Column2

1     somTime     1         1
2     somTime     2         2
3     somTime     3  

由于用户要求表是动态的,用户可以创建他想要的任意数量的列,并且可以分别将值插入这些列。 在这里我想得到插入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的最新值? 任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

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

获得价值

方式1:

result["Column2", BsonNull.Value]

方式2:

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

方式3:

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

答案 1 :(得分:0)

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

您需要在Where查询中加入maxDateTime条款,只需获取maxDateTime密钥存在的文档的Column2

例如

Query.Exists("Column2")

答案 2 :(得分:0)

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

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