我需要一些想法/提示。這裏是我保存樣本文檔:Mongodb保存/ upsert使用C#驅動程序,連續陣列添加和現場更新到相同的文檔
{
"_id" : new BinData(0, "C3hBhRCZ5ZFizqbO1hxwrA=="),
"gId" : 237,
"name" : "WEATHER STATION",
"mId" : 341457,
"MAC" : "00:00:00:00:00:01",
"dt" : new Date("Fri, 24 Feb 2012 13:59:02 GMT -05:00"),
"hw" : [{
"tag" : "Weather Sensors",
"snrs" : [{
"_id" : NumberLong(7),
"sdn" : "Wind Speed"
}, {
"_id" : NumberLong(24),
"sdn" : "Wind Gust"
}, {
"_id" : NumberLong(28),
"sdn" : "Wind Direction"
}, {
"_id" : NumberLong(31),
"sdn" : "Rainfall Amount"
}, {
"_id" : NumberLong(33),
"sdn" : "Rainfall Peak Amount"
}, {
"_id" : NumberLong(38),
"sdn" : "Barometric Pressure"
}],
"_id" : 1
}]
}
什麼我目前做的不過是使用C#驅動程序和執行.Save()到我的收藏得到UPSERT,我要的是有點兒一種混合的方法我猜。這裏有不同的操作,我需要能夠執行:
- 的Upsert整個文檔,如果它不存在
- 更新與新的時間戳DT場,如果該文件確實存在
- 對於硬件領域,我需要幾件事。如果hw._id存在,更新其標記字段,以及通過處理信噪比場或者更新現有條目因此SDN值被更新或添加全新entires時_id不存在
沒有什麼應該被從中移除hw陣列和任何東西都不應該從snrs數組中刪除。
標準的upsert似乎並沒有讓我知道我在做什麼,所以我正在尋找儘可能少的往返服務器來完成我所需要的最佳方式。我認爲一些$運營商可能是我在這裏需要的,但只需要一些關於如何最好地解決這個問題的想法。
我在這裏所做的要點是保持snrs條目的累積歷史文檔與即時的當前值,並保留陣列中的任何歷史條目,即使它們不再「活着」,正在被報告,等等。這允許將來報告當前不再存在的事情,但在過去的某個時間點。 _id值是應用程序生成的,在所有文檔中全局唯一,並且在初始創建後永遠不會更改。例如,上週「風速」正在報道中,但本週並非如此。這是_id值,但是,如果「風速」再次開始報告,則不會改變。跟隨?
如有需要,可以提供澄清或更多細節。
謝謝。