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

在额外的MongoDB字段中保存数组长度,mongodb,mongodb-query,Mongodb,Mongodb Query,根据答案,我试图找出数组的大小并将其保存在额外字段中 我有一个集合user\u 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 rea

根据答案,我试图找出数组的大小并将其保存在额外字段中

我有一个集合
user\u 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"
如何在额外字段中保存数组的长度

附:我正在使用MongoDB 3.4

将返回的
likes\u计数
存储在
变量
中,并通过提供
likes\u计数
变量执行更新

像这样的

Model.aggregate(
    [
        {
            $project: {
                likes_count: { $size: "$test" }
            }
        }
    ], (err, re) => {
        console.log(err, re);
        var likes_count = re[0].likes_count;
        Model.update({email: 1}, {$set: {likes_count: likes_count}}, (err, d) => {
            console.log(err, d);
        })
    }
)

使用MongoDB 3.4及更新版本,您可以使用管道添加所需字段(阶段相当于一个阶段,该阶段明确指定输入文档中的所有现有字段并添加新字段)然后使用运算符将聚合操作的结果写入同一集合,从而有效地更新基础集合

如果由操作指定的集合已经存在,则在聚合完成后,阶段将用新的结果集合自动替换现有集合

要获取计数,请使用返回数组字段长度的运算符请记住,所有文档都必须有
likes
字段。

总体而言,您需要运行以下管道以实现所需的更新操作:

db.user_details.aggregate([
    { "$addFields": { "likes_count": { "$size": "$likes" } } },
    { "$out": "user_details" }
])
值得一提的是它的副本。
db.user_details.aggregate([
    { "$addFields": { "likes_count": { "$size": "$likes" } } },
    { "$out": "user_details" }
])