无法访问MongoDB Aggregate函数中$lookup中$addFields的结果



我有一个聚合函数,其中有带管道的嵌套查找。在其中一个管道中,我有以下内容-

{
 "$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", ","]},
          []
     ]
   }
  }
}

最新更新