首页 > 解决方案 > 如何在 mongodb 中使用查找和 $push

问题描述

我在玩 Mongodb,想要一个使用查找和 $push 或 $addToSet 的查询

看到这个 https://mongoplayground.net/p/4hSPKW_bCdM

我怎样才能使这个查询正确。我们需要在这里循环吗?

应该返回

{
  "response": [
    {
      "_id": "5fcdcc14da26c80a6de06754",
      "first_name": "James",
      "last_name": "Hales",
      "username": "jim",
      "timestamp": 1607322644202,
      "userData": [
        {
          "_id": "6011021851781d3d9841e09d",
          "user_id": "5fcdcc14da26c80a6de06754",
          "photo": [
            {
              "_id": "6011021851781d3d9841e09e",
              "url": "http://localhost:3000/files/ou93r0cfjde0cat.jpg",
              "width": 250,
              "height": 500,
              "preview": "skjdfbsdjvns;svnsdvisdvnvsdjvnsdivsdkvsdivsdjvnsdjvsdvsdvgjsvnsvhi"
            }
          ],
          "status": "Active",
          "timestamp": 1611727384083,
          "expire_at": "2021-01-27T06:03:04.083Z"
        },
        {
          "_id": "6011021851781d3d9841e09d",
          "user_id": "5fcdcc14da26c80a6de06754",
          "photo": [
            {
              "_id": "6011021851781d3d9841e09e",
              "url": "http://localhost:3000/files/ou93r0cfjee0bat.jpg",
              "width": 250,
              "height": 500,
              "preview": "skjdfbsdjvns;svnsdvisdvnvsdjvnsdivsdkvsdivsdjvnsdjvsdvsdvgjsvnsvhi"
            }
          ],
          "status": "Active",
          "timestamp": 1611727384083,
          "expire_at": "2021-01-27T06:03:04.083Z"
        }
      ]
    }
  ]
}

预先感谢

标签: mongodbaggregation-framework

解决方案


  • (可选) $match数组中的用户 ID
  • $lookup带站点,_id作为本地域和user_id外域传递
  • (可选) $match如果您想删除空userData用户的文档
db.users.aggregate([
  // optional match stage
  {
    $match: {
      _id: { $in: [ObjectId("5fcdcc14da26c80a6de06754"), ObjectId("5fcdd0075dc42a0d5c7ec813")] }
    }
  }
  {
    $lookup: {
      from: "site",
      localField: "_id",
      foreignField: "user_id",
      as: "userData"
    }
  },
  // optional match stage
  { $match: { userData: { $ne: [] } } }
])

操场


推荐阅读