Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
使用$avg mongodb插入新字段_Mongodb_Meteor_Average - Fatal编程技术网

使用$avg mongodb插入新字段

使用$avg mongodb插入新字段,mongodb,meteor,average,Mongodb,Meteor,Average,每次用户对某篇文章的评分从1到5,该数字就会以userId作为属性名写入(作为属性值) "starRatingByUser" : { "iZxSjCduTjfCQbmf9" : 3, "LvBr6a427ofuvXFMp" : 4, "gfhfhfh98rtgfXFft" : 5 } 是否可以在用户每次添加或更新评级时插入(更新)新字段(“starRatingAverage”)和所有评级的平

每次用户对某篇文章的评分从1到5,该数字就会以userId作为属性名写入(作为属性值)

"starRatingByUser" : {
    "iZxSjCduTjfCQbmf9" : 3,
    "LvBr6a427ofuvXFMp" : 4,
    "gfhfhfh98rtgfXFft" : 5
}
是否可以在用户每次添加或更新评级时插入(更新)新字段(“starRatingAverage”)和所有评级的平均值

例如:

"starRatingAverage": 4,
"starRatingByUser" : {
    "iZxSjCduTjfCQbmf9" : 3,
    "LvBr6a427ofuvXFMp" : 4,
    "gfhfhfh98rtgfXFft" : 5
}
我有这个方法:

Recipes.update(
  { _id: recipeId },
  { $set: { ["starRatingByUser." + this.userId]: star }}
)
[示例图像]

在mongodb中有一个使用聚合进行更新的选项

  • 以下更新查询设置为两个参数。首先是查找文档,其次是进行聚合
合计

  • 使用
    $objectToArray
    将对象转换为数组以计算总数
  • 使用
    $size
    获取数组的大小,并使用
    $reduce
  • $project
    删除不需要的字段
剧本是

db.colelction.updateOne(
  {_id:1},
[
  {
    $addFields: {
      stu: {
        "$objectToArray": "$starRatingByUser"
      }
    }
  },
  {
    $addFields: {
      size: {
        $size: "$stu"
      },
      total: {
        $reduce: {
          input: "$stu",
          initialValue: 0,
          in: {
            $add: [
              "$$this.v",
              "$$value"
            ]
          }
        }
      }
    }
  },
  {
    "$project": {
      starRatingByAverage: {
        "$divide": [
          "$total",
          "$size"
        ]
      },
      starRatingByUser: 1
    }
  }
])

此查询已检查,工作正常

这非常不清楚,请更新或更新