mongodb $lookup and match for an array item from inside look up

mongodb $lookup and match for an array item from inside look up

return 与用户的订单,其中购买 ID:123,产品 ID:p123 以及用户和订单 shipping.mode =2

db={
  "orders": [
    {
      "_id": ObjectId("62155381877d4300196008ef"),
      "shipping": {
        "mode": 1
      },
      "products": [],
      "user": ObjectId("6186bd3315a342001bd84f42"),
      
    },
    {
      "_id": ObjectId("6215569b54cc7f0030c44e0f"),
      "shipping": {
        "mode": 2
      },
      "user": ObjectId("6186bd3315a342001bd84f43"),
      "products": [
        {
          "id": "p123"
        }
      ],
      
    }
  ],
  "users": [
    {
      "_id": ObjectId("6186bd3315a342001bd84f43"),
      "shipping": {
        "mode": 2
      },
      "name": "user100",
      "purchase": [
        {
          "id": "123"
        },
        {
          "id": "hjhh"
        }
      ],
      
    }
  ]
}

https://mongoplayground.net/p/IomR8U7Ard-

db.orders.aggregate([
  {
    "$lookup": {
      "from": "users",
      "localField": "user",
      "foreignField": "_id",
      "as": "user"
    }
  },
  {
    "$unwind": "$user"
  },
  {
    "$unwind": "$user.purchase"
  },
  {
    "$match": {
      "$and": [
        {
          "shipping.mode": {
            "$gt": 0
          }
        },
        
      ]
    }
  },
  {
    "$match": {
      "$or": [
        {
          "$and": [
            {
              "user.shipping.mode": {
                "$eq": 2
              }
            },
            {
              "user.purchase.id": {
                "$eq": "123"
              }
            },
            {
              "$expr": {
                "$in": [
                  "p123",
                  "$products.id"
                ]
              }
            }
          ]
        },
        
      ]
    }
  },
  
])