聚合$lookup,但数组为空

$lookup in aggregate but array is empty

提问人:Iman Kamali 提问时间:11/4/2023 更新时间:11/4/2023 访问量:21

问:

我用$lookup加入连接。但是加入时需要空列表

''' var userId=“65421d801c128f2ed899a7a4”;''

aggregate([

   {
     $unwind: {
        path: "$reserve",
        preserveNullAndEmptyArrays: true
    }
   },
{
  $lookup: {
    from: "reserves",
    let: {
      reserveData: "$reserve"
    },
    pipeline: [{
      $match: {
        $expr: {
          // $eq: ["$$reserveData", "$_id"],  //return  empty list
          
          // $eq: [new mongoose.Types.ObjectId(userId),"$_id"],// This code works
 
          $eq: [new mongoose.Types.ObjectId("$$reserveData"),"$_id"],// This code error

        }
      },
    }, ],
    as: "reserve"
  }
    ])

以及使用 userId 时的结果

{
    "status": "success",
    "message": "okkkk",
    "results": 1,
    "data": [
        {
            "_id": "sdfgsd56",
            "customer": "fghdfbv",
            "price": 170000,
            "off": 30000,

            "reserve": [
                {
                    "_id": "65421d801c128f2ed899a7a4",
                    "customer": "6540debf6ca6663eb886eb46",
                    "service": "65421c961c128f2ed899a631",
                    "__v": 0
                }
            ]
        }
    ]
}

但使用 get 错误:“传入的参数必须是 12 个字节的字符串或 24 个十六进制字符的字符串或整数” 和错误时使用
{$toObjectId: “$$reserveData”} {$toString: “$$reserveData”}
$eq: [new mongoose.Types.ObjectId("$$reserveData"),"$_id"]

MongoDB 聚合 管道 查找 ObjectID

评论

0赞 Yong Shun 11/5/2023
如果您能提供示例输入文档,那就太好了。由于错误提到你的 和 不是 ObjectId,也不是有效的 ObjectId 字符串。$$reserveDatareserve
0赞 Buzz Moschetti 11/6/2023
几乎可以肯定的是,输入的数据不是纯的(12 字节)或相同的十六进制字符串表示(24 字节)。$$reserveDataObjectId
0赞 Joe 11/7/2023
在展开中设置 preserveNullAndEmptyArrays 选项,这意味着“$reserve”的一个或多个值可以是 null、空字符串或空数组。尝试使用,以便处理该错误情况。$convert

答: 暂无答案