根据this的答案,我试图找出数组的大小并将其保存在额外的字段中。
我有一个集合user_details
,文档结构类似于:
{
user_id : 1,
likes : [1,2,3,4],
likes_count : 0
}
我使用的查询如下:
db.user_details.update({user_id : 1},{$set:{ likes_count : this.likes.length }})
但是,它会抛出错误
"message" : "Cannot read property 'length' of undefined"
如何在额外字段中保存数组的长度?
PS:我使用的是MongoDB 3.4
答案 0 :(得分:3)
使用MongoDB 3.4及更新版本,您可以使用 $addFields
管道添加所需的字段( $addFields
阶段相当于< strong> $project
阶段,显式指定输入文档中的所有现有字段并添加新字段),然后使用 $out
将聚合操作的结果写入同一集合运算符,从而有效地更新底层集合。
如果 $out
操作指定的集合已经存在,那么在完成聚合后, $out
阶段会自动替换现有的收集新的结果集。
要获取计数,请使用 $size
运算符,该运算符返回数组字段的长度。总的来说,您需要运行以下管道来实现所需的更新操作:
db.user_details.aggregate([
{ "$addFields": { "likes_count": { "$size": "$likes" } } },
{ "$out": "user_details" }
])