我的数据库中有一些帖子,其中包含以下基本信息:
Posts = {
_id: '',
title '',
desc '',
...
}
我也有一个Likes集合,(喜欢该帖子的用户创建或删除了文档):
Likes = {
_id: '',
user_id: '',
post_id: '',
}
而目标将是,当我得到的名单的帖子,增加一个字段喜欢谁表现出真/假如果文档就像匹配与否,也是比赛的数量像集合(这个我知道如何)像:
Posts = [{
_id: '',
title '',
desc '',
liked: true,
likes: 5,
...
}, ...]
我用过$lookup
&,$addFields
但到目前为止只能以一个值加入。在我的情况下,我想要一个特定的文档并按2个字段(user_id,post_id)进行过滤。
我到目前为止所得到的:
const posts = await posts.aggregate
([
{
$lookup: {
from: 'likes',
localField: '_id',
foreignField: 'post_id',
as: 'likes'
}
},
{ $match: {
user_id: mongoose.Types.ObjectId(req.params.id),
} },
{
$addFields: {
likes:
{ $size: "$likes" } // here nb of likes
}
}
])
试试这个
db.getCollection('post').aggregate([
{
$lookup: {
from: 'likes',
localField: '_id',
foreignField: 'post_id',
as: 'likes'
}
},
{
$addFields:{
size:{$size:"$likes"},
liked:
{$size: {
$filter: {
input: "$likes",
as: "item",
cond: { $eq: [ "$$item.user_id", ObjectId("5f2a38ad61a591cf96d58f6a") ] }
}
}
}
}
},
{
$addFields:{
liked:{
$cond:[{$eq:["$liked",0]},false,true]
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句