我正在尝试进行一些汇总,但遇到以下问题。我需要使用“管道”,当我要查找的数组丢失时,我得到了一个错误。
{
$lookup: {
from: 'comments',
let: { comments: '$comments' },
pipeline: [
{
$match: {
$expr: {
$in: ['$_id', '$$comments']
},
isDeleted: false
}
}
],
as: 'comments'
}
}
在此阶段,我得到以下错误:
'$in requires an array as a second argument, found: missing'
因为并非所有文档都具有“评论”字段。
注意:我使用的是管道而不是 foreingField 和 localField ,因为我需要过滤isDeleted: false
或其他过滤器匹配条件。
仅当文档具有评论字段时,才可以进行此查找吗?
谢谢!
答案 0 :(得分:0)
您可以添加$ifNull
或$and
,其中不能为null或在$expr
中存在条件
{
$lookup: {
from: 'comments',
let: { comments: '$comments' },
pipeline: [
{
$match: {
$expr: {$and: [
{$in: ['$_id', {$ifNull :['$$comments',[]]}]},
{$eq: ["$isDeleted", false]}
]}
}
}
],
as: 'comments'
}
}