Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB更新平均值_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript MongoDB更新平均值

Javascript MongoDB更新平均值,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我试图缓存平均值顺序,以避免检索所有评级并避免聚集(因为平均值通常会获得): 这基本上就是我要做的: Product.findOne _id: id, (prod) -> prod.mean = (prod.rate_count * prod.mean + rateCasted) / (prod.rating_count + 1) prod.rate_count++ prod.save() 问题:这意味着将产品加载到应用程序中,这是我不想做的(性能、并发投票…) 那么,我如何

我试图缓存平均值顺序,以避免检索所有评级并避免聚集(因为平均值通常会获得): 这基本上就是我要做的:

Product.findOne _id: id, (prod) ->
  prod.mean = (prod.rate_count * prod.mean + rateCasted) / (prod.rating_count + 1)
  prod.rate_count++
  prod.save()
问题:这意味着将产品加载到应用程序中,这是我不想做的(性能、并发投票…)


那么,我如何通过一个
更新操作来实现这一点呢?

您可以使用猫鼬来实现这一点,如果需要,可以将其保留在模型中。该方法会更新模型,但不会将其返回。

要更新产品而不检索完整对象吗?根本不检索它。我知道
选择
。我只需要一个更新请求:)与其将平均值存储在您的文档中,为什么不存储计数和总数?然后,您可以将count增加1,将total增加
rateCasted
原子化。如果您使用Mongoose,就像它看起来一样,您无论如何都无法不加载整个Product对象。您必须加载它才能更新它@Vinz243使用findAndModify()并获取旧文档。如果没有旧文档存在,那么您知道这是一个新的评级。如果老医生有一个评级,然后采取差异。谢谢你,但我知道的更新方法;问题是更新不仅仅是一个$inc,它还基于其他领域,如评级计数