MongoDB Save不会删除预先存在的元素

时间:2011-11-09 12:17:10

标签: c# mongodb

MongoDB Save(C#驱动程序)的情况很奇怪。我正在保存现有文档(该密钥在保存的BsonDocument中就位)。我的保存语句如下所示:

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

其中molecularDoc是BsonDocument。 divDoc BsonDocument中保存的元素可能会有所不同。有时,数据库中现有文档中的元素将被删除,因为保存的molecularDoc BsonDocument不再包含它们。

问题是,在成功保存后,一些元素仍保留在数据库保存的文档中,即使它们在保存的BsonDocument中不存在。当我保存第二次时,这些元素通常会消失。

我在保存之前已经仔细地对BsonDocument进行了细节处理,并且它肯定不包含Save之后出现的某些元素(但是在Save之前确实存在于数据库保存的文档中。

以下是已保存文档的示例:

{
  "_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"
}

请注意,“filename”元素不在保存的BsonDocument中,但是在保存之后它仍保留在原来的数据库中。

一个奇怪的方面是它确实在SECOND Save之后删除了这些'ghost'元素。

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

保存完全用新文档替换现有文档,或者如果没有找到现有文档,则插入新文档。你不应该描述你所描述的行为。

如果您能提供可重复的案例,请在jira.mongodb.org上为此创建一张JIRA票。

另外,我注意到您使用的是UUID作为_id值。由于历史原因,在数据库中保存UUID时,不同的驱动程序使用了不同的字节顺序(因此二进制值不同)。特别是,mongo shell和C#驱动程序不使用相同的字节顺序,因此您可能不会查看相同的文档。