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'元素。
任何人都可以对此有所了解吗?
答案 0 :(得分:0)
保存完全用新文档替换现有文档,或者如果没有找到现有文档,则插入新文档。你不应该描述你所描述的行为。
如果您能提供可重复的案例,请在jira.mongodb.org上为此创建一张JIRA票。
另外,我注意到您使用的是UUID作为_id值。由于历史原因,在数据库中保存UUID时,不同的驱动程序使用了不同的字节顺序(因此二进制值不同)。特别是,mongo shell和C#驱动程序不使用相同的字节顺序,因此您可能不会查看相同的文档。