Javascript 如果存在与MongoDB匹配的其他文档,则添加字段&;猫鼬
我的数据库中有一组帖子,包含以下基本信息:Javascript 如果存在与MongoDB匹配的其他文档,则添加字段&;猫鼬,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我的数据库中有一组帖子,包含以下基本信息: Posts = { _id: '', title '', desc '', ... } 我还有一个Likes收藏like(创建或删除用户喜欢的文档): 目标是,当我得到一个帖子列表时,添加一个喜欢的字段,如果文档喜欢的匹配与否,该字段将显示真/假,以及喜欢的集合(我知道如何)中的匹配数,如: 我已经使用了$lookup&$addFields,但到目前为止只能使用一个值进行联接。在我的例子中,我需要一个特定的文档,并通过两个字段(用户
Posts = {
_id: '',
title '',
desc '',
...
}
我还有一个Likes收藏like(创建或删除用户喜欢的文档):
目标是,当我得到一个帖子列表时,添加一个喜欢的字段,如果文档喜欢的匹配与否,该字段将显示真/假,以及喜欢的集合(我知道如何)中的匹配数,如:
我已经使用了$lookup
&$addFields
,但到目前为止只能使用一个值进行联接。在我的例子中,我需要一个特定的文档,并通过两个字段(用户id、发布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]
}
}
}
])
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]
}
}
}
])