我有一个聚合函数,其中有带管道的嵌套查找。在其中一个管道中,我有以下内容-
{
"$addFields": {
"ids": {
"$split": ["$id", ","]
}
}
},
{
"$lookup": {
"from": 'collection2',
"let": {"new_id": "$ids"},
"pipeline": [
{ "$match": {
"$expr": {
"$in": ["$ID", "$$new_id"]
}
}
}
],
"as": 'groups'
}
}
在上面的管道中,addFields正在拆分"中逗号分隔的值;id">并将其添加到名为"strong>"的数组中;ids"。
这个"ids">我在下面的查找中使用它来查找来自其他集合的数据$在"。
但我在MongoDB Compass中遇到了这个错误-$in需要一个数组作为第二个参数,找到:null。
我尝试了同样的方法,在Compass中的一个单独的聚合管道中只使用了这个管道,在那里我可以正确地获得结果,但当我在嵌套查找管道中包含相同的管道时,它不起作用,并给出了上述错误。
这是因为嵌套或任何局部变量或任何其他问题吗?
错误消息$in requires an array as a second argument, found: null
表示找到了一个值,该值为null。
如果根本没有找到任何值,则错误为"$in requires an array as a second argument, found: missing"
最可能的问题是集合中的一个或多个文档没有id
字段,因此$split
返回null。
为了解决这个问题,当$split
返回null时,可以使用$ifNull
运算符返回一个空数组,例如:
{"$addFields": {
"ids": {
"$ifNull":[
{"$split": ["$id", ","]},
[]
]
}
}
}