Mongoose 聚合获取计数并将新值附加到查询结果
Posted
技术标签:
【中文标题】Mongoose 聚合获取计数并将新值附加到查询结果【英文标题】:Mongoose aggregate Get count and append new value to the query result 【发布时间】:2021-08-01 15:23:05 【问题描述】:鉴于我有这两个系列:。
1st.col
users:
_id :34,
name :"mama mia"
2nd.col
posts:
_id :67
body :" hello mongoose"
likes:[ 0: ObjectId("34") ]
我想让每一个帖子都有点赞数。
假设我有一个 auth 用户 id 准备好并且想要通过喜欢进行映射,并且如果在帖子中找到 user._id
(auth id) 喜欢我想在集合结果中附加一个新属性而不是在 db 中,我只是想修改我要得到的结果。
为了回答我的问题,这是预期的结果:
[
_id : 67
body : " hello mongoose"
likesCount : 1
liked :true
likes :
"34":
name :"mama mia"
]
【问题讨论】:
【参考方案1】:$lookup
加入用户收藏
$map
循环likes
数组并返回key-value格式结果
$arrayToObject
将对象的键值数组转换为对象
$size
获取 likes
数组中的总元素
$in
检查 likes
数组中的当前身份验证用户 ID 与否
let auth_user_id = ObjectId("34");
db.posts.aggregate([
$lookup:
from: "users",
localField: "likes",
foreignField: "_id",
as: "likes"
,
$project:
likes:
$arrayToObject:
$map:
input: "$likes",
in:
k: $toString: "$$this._id" ,
v: "$$this.name"
,
likesCount: $size: "$likes" ,
liked: $in: [auth_user_id, "$likes"] ,
body: 1
])
Playground
【讨论】:
嗨哥们,我觉得加入用户收藏没有任何目的,对吧!! 是的,他提到了我已经准备好验证用户ID。 @varman wt 你的意思是,我怎么知道用户是否喜欢这篇文章? @DimerBwimba 它与您之前的问题完全不同,您可以提出新问题而不是更新当前问题。看看如何ask good question。 确保您已将输入auth_user_id
转换为 objectid 类型,使用 mongoose.Types.ObjectId(auth_user_id)
以上是关于Mongoose 聚合获取计数并将新值附加到查询结果的主要内容,如果未能解决你的问题,请参考以下文章
具有 3 个级别的 MongoDB 嵌套查找并将新值附加到结果文档
如何获取 Model.countDocuments() 函数返回的文档计数并将其设置为猫鼬中的其他字段