对于不断增长的文档,我可以选择使用update()
或findAndModify()
在数组字段中插入新元素。但是,findAndModify()
将在我的特定应用程序中生成更清晰的代码。但我可以使用update()
实现相同的功能,只是更麻烦。
我只是想知道使用update()
代替findAndModify()
会带来多少性能提升。非常感谢!
答案 0 :(得分:2)
我使用mongo shell进行了快速测试。对于本文件:
{
"c" : 50,
"growingArray" : [ 0 ]
}
我进行了两次测试:
for (i = 1; i < 10000; i++)
{
db.testids.update( { "c" : 50 }, { $addToSet : { "growingArray" : i } } );
}
在我的中档笔记本电脑上总共 40.926s 。
findAndModify()
版本:
for (i = 1; i < 10000; i++)
{
db.testids.findAndModify({ query: { "c" : 50 }, update : { $addToSet : { "growingArray" : i } } } );
}
42.445 秒。我平均每次跑五次。
从中取出你的意愿。这个下意识的结论是,在我的特定环境中,findAndModify()
有大约3%到4%的开销而没有其他任何事情发生。请记住,findAndModify()获取写锁定,因此您可能会对整个应用程序的性能产生更大的影响。