nModified:0并写入性能

时间:2015-08-27 11:23:33

标签: mongodb

我正在尝试提高使用mongodb的应用程序的更新性能。 尝试使用mongo shell执行更新的不同方法我发现了一些我无法解释的事情。 在某些情况下,我有“nModified”:1即使我提供相同的文件。 以下是我做的一些例子:

> var doc = {k:10, c:1,c:2}
> var key = {k:10}
> db.foo.update(key,doc, {upsert:1})  
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0 })
> db.foo.update(key,doc, {upsert:1}) // I was expecting nModified:0 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

但如果我使用$ set mongo能够看到存储的文件是相同的,然后nModified设置为0:

> db.foo.update(key,{$set:doc}, {upsert:1})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

如果我尝试替换在第一个位置指定_id的文档

,则相同
> doc = db.foo.findOne(key)
{ "_id" : ObjectId("55ded9c0595d0be1b0eb734c"), "k" : 10, "c" : 2 }
> db.foo.update(key,{$set:doc}, {upsert:1})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
> db.foo.update(key,doc, {upsert:1})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

但如果我将_id放在文档的末尾,那就不行了:

> var doc = {k:10, c:1,c:2}
> doc._id = db.foo.findOne(key)._id
> doc
{ "k" : 10, "c" : 2, "_id" : ObjectId("55ded9c0595d0be1b0eb734c") }
> db.foo.update(key,doc, {upsert:1})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.foo.update(key,doc, {upsert:1})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

现在我想知道这是否会影响性能,当我们有nModified时:0写入性能加快。

我希望我的例子足够清楚

0 个答案:

没有答案