我在从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的最新值? 任何人都可以帮忙吗?
答案 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];