我有以下表格的文件收集:
{ name:String, groceries:{ apples:Number, cherries:Number, prunes:Number } }
现在,对于“杂货”中的每个元素,我必须对每个查询增加正值和/或负值。我只是添加了一些示例,什么键或多少键并不重要。
我可以做一个:
var dataToBeIncremented = stuff;
var $inc = {};
for each( var index in dataToBeIncremented )
{
$inc[ "groceries." + index ] = dataToBeIncremented[ index ];
}
然后
db.update( { _id:targetID }, { $inc : query } )
但是,我可能有成千上万的杂货店元素,并且发现每次更新时执行此循环都很丑陋且未优化。
我想知道如何使它无效或为什么不能对其进行优化。
实际上,没有办法避免这种情况,因为没有这样的命令可以增加子文档中的所有值。
因此,唯一的方法就是像您所做的那样做一些事情:
{
"$inc": {
"groceries.apples" : 1,
"groceries.cherries" : 1,
"groceries.prunes" : 1
}
}
由于您不知道确切的字段是什么,因此需要事先查找它们并创建$ inc语句。这些更新有一件好事:无论您拥有多少元素,您仍然只需要两个查询(查找要更新的内容和实际执行更新的内容)。
我也在考虑如何使用不同的模式来获得更好的结果,但是显然您必须应对已有的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句