我有一个名为post的集合,我有一个doc及其复制的doc但是在复制的doc中我们有一个不同的字段,有些doc没有复制的doc,那个情况取决于doc的数组字段,如果该字段具有user的userId,然后复制的doc将存在,否则它将不存在。
所以我想要的是如果doc数组有那个id然后得到复制的帖子,如果没有那么原始帖子
我已经进行了查询,但显示错误我使用$存在于$ cond?
Post.aggregate([
{
$match: {
socomo_visibility: socomoId
}
},
{
$project: {
"post_stream_type": {
$cond: {
if: {
'following_users_list': {
$exist: [userId]
}
},
then: constants.POST_STREAM_TYPE.FOLLOW.value,
else: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value
}
}
}
}
]
答案 0 :(得分:0)
你可以用这样的方式检查你的数组在boolean-expression中是否有一些值:
请尝试以下代码:
Post.aggregate([
{
$project: {
"post_stream_type": {
$cond: {
if: {$gt: [{$size: {$setIntersection: ["$following_users_list", [userId]] } }, 0] },
then: constants.POST_STREAM_TYPE.FOLLOW.value,
else: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value
}
}
}
}
])
答案 1 :(得分:0)
好吧最后我没有使用聚合就完成了这个。 我的查询答案是
Post.find({
$or: [{
socomo_visibility: {
$elemMatch: {
$eq: socomoId
}
},
post_stream_type: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value,
following_users_list: {
$exists: true,
$nin: [userId]
}
},
{
socomo_visibility: {
$elemMatch: {
$eq: socomoId
}
},
post_stream_type: constants.POST_STREAM_TYPE.FOLLOW.value,
following_users_list: {
$elemMatch: {
$eq: userId
}
}
}]
})