2015-03-19 42 views
0

我面臨從MongoDB表(集合)中檢索最新值的問題。MongoDB使用C的最後值或最大值#

我的表沒有映射類。由於動態行爲,我無法爲我的表創建類。

對於例如 MyTable的具有下文提到的是表和值4列。

Id , DateTime, Column1, Column2 

1  somTime  1   1 
2  somTime  2   2 
3  somTime  3 

由於用戶要求該表是動態的,用戶可以創建他想要的列數,並且他可以分別將值插入到這些列中。 在此我想插入列2的最新值是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

對不起後期的答覆。以下代碼解決了我的問題。

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

***它的c而不是in(來自document.AsQueryable()中的一個) – 2015-05-15 11:52:34

0

當您檢索maxDateTime值您檢索最新的一個集合中,但是這個文件可能不包含Column2關鍵

您需要在您的maxDateTime查詢Where條款有何只能得到maxDateTime用於存在密鑰Column2的文檔。

e.g

Query.Exists("Column2") 
+0

很好聽,你得到它的工作。如果您對答案感到滿意,您會將其標記爲已接受嗎? – kevin 2015-03-20 08:26:34

+0

感謝Kevin,但實際上Disposer給出的解決方案實際上幫助我解決了這個問題。我忘了在這裏更新答案我的壞。我現在將它發佈在這裏。 – 2015-05-15 11:43:47

1

result沒有備案的命名你的文檔中Column2。將該溶液經由

方法1獲得的值:

result["Column2", BsonNull.Value] 

方式2:

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

方式3:

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

謝謝。這有助於找到正確的解決方案。我已經提供了下面的解決方案。 – 2015-05-15 11:57:26

相關問題