对于不断增长的文档,我可以选择使用update()或findAndModify()在数组字段中插入新元素。但是,findAndModify()将在我的特定应用程序中生成更清晰的代码。但我可以使用update()实现同样的功能,只是更麻烦。
我只是想知道使用update()而不是findAndModify()会带来多大的性能收益。非常感谢!
发布于 2015-07-08 17:26:13
我用芒果壳做了个快速测试。关于本文件:
{
"c" : 50,
"growingArray" : [ 0 ]
}我做了两次测试:
for (i = 1; i < 10000; i++)
{
db.testids.update( { "c" : 50 }, { $addToSet : { "growingArray" : i } } );
}在我的中档笔记本电脑上总共使用了40.926 s。
findAndModify()版本:
for (i = 1; i < 10000; i++)
{
db.testids.findAndModify({ query: { "c" : 50 }, update : { $addToSet : { "growingArray" : i } } } );
}42.445秒。我平均每人五次。
从里面拿走你想要的。下意识的结论是,在我的特定环境中,findAndModify()的开销约为3%至4%,没有其他任何事情发生。但是,请记住,findAndModify()获得写锁,这样对应用程序整体性能的影响就会大得多。
https://stackoverflow.com/questions/31274569
复制相似问题