在额外的MongoDB字段中保存数组的长度

时间:2017-02-23 07:33:29

标签: mongodb mongodb-query

根据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

1 个答案:

答案 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" }
])