2011-11-09 47 views
0

我有一個MongoDB保存(C#驅動程序)的奇怪情況。我正在保存一個現有的文檔(關鍵是保存在BsonDocument內)。我的保存聲明如下所示:MongoDB保存並不刪除預先存在的元素

SafeModeResult result = moleculeCollection.Save(moleculeDoc, SafeMode.True); 

其中moleculeDoc是BsonDocument。分子文檔中保存的元素可能會有所不同。有時數據庫中現有文檔中的元素將被刪除,因爲保存的moleculeDoc BsonDocument不再包含它們。

問題是,成功後保存了一些元素保留在數據庫保存的文檔中,即使它們不存在保存的BsonDocument內。當我第二次保存時,這些元素通常會消失。

我仔細眼揉成團的保存之前BsonDocument詳細,並且絕對不包含保存之後出現的某些元素(但沒有之前保存數據庫持有的文檔中存在。

這裏是一個保存文檔的一個例子:

{ 
    "_id": { 
    "$binary": "qAvZU8AzqES1fv0OL9GaBw==", 
    "$type": "03" 
    }, 
    "title": "Url 1a", 
    "mediatype": "url", 
    "modifieddate": "Wed, 09 Nov 2011 11:56:57 GMT", 
    "filename": "iphone.pdf", 
    "contenttype": "application/pdf", 
    "weburi": "ffff" 
} 

注意,「文件名」元素並不是被保存在BsonDocument內,但它保存後留在地方,雖然已經在之前的數據庫保存。

一個奇怪的方面是,它會在SECOND保存後刪除這些'鬼'元素。

任何人都可以對此有所瞭解嗎?

+0

我確定mongodb save是一個upsert(文檔級別而不是更新中的字段級別)。如果id存在或者創建新文件,它將覆蓋整個文件。所以無論新文檔中的字段只存在於保存的文檔中,分子類型是什麼?是MongoCollection嗎? – RameshVel

回答

0

保存完全替換現有的文檔,如果沒有找到現有文檔,則插入新的文檔。你所描述的行爲不應該是可能的。

如果您可以提供可複製的案例,請在jira.mongodb.org上爲此創建一個JIRA票據。

另外,我注意到你使用UUID作爲你的_id值。由於歷史原因,不同的驅動程序在將UUID保存到數據庫時使用了不同的字節順序(因此二進制值不同)。特別是,mongo shell和C#驅動程序不使用相同的字節順序,因此您可能看不到相同的文檔。

相關問題