我有一个简单的数据库,其中包含一个用户集合。这就是文档的样子:
{
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个元素数组中运行,以前三个元素数组。