在 Mongoose 中,如何生成一个新字段,其值是另一个字段数组的长度?



我有一个简单的数据库,其中包含一个用户集合。这就是文档的样子:

{
   username: "Joe",
   age: 20,
   friends: ["u2", "u5", "u6", "u7", "u11"]
}

我想创建一个查询,该查询将返回看起来像

的东西
{
   username: "Joe",
   age: 20,
   total_friends: 5,
   friends: ["u2", "u5", "u6"]
}

请注意,我只切了前三名朋友,因为我不想在每个查询中返回用户朋友的所有。

切片之前如何创建total_friends字段?

这是我到目前为止所拥有的:

UserModel.findById( new Types.ObjectId(userId))
             // what goes here??
            .slice('friends', 3)
            .populate('friends')
            .exec((err, doc) => {...});

您可以使用聚合框架。尝试以下操作:

db.userModel.aggregate([
    {
        $addFields: {
            total_friends: { $size: "$friends" },
            friends: { $slice: [ "$friends", 3 ] }
        } 
    }
])

由于5个元素数组是管道级级$ size的输入,将返回5个元素,而$ slice将在5个元素数组中运行,以前三个元素数组。

最新更新