首页 > 解决方案 > 如何一次从具有嵌套对象数组的多个文档中获取与来自 mongodoDb 的查询匹配的所有值

问题描述

我在 mongoDb 中的用户模型具有以下数据。我想要的是文档 id ==(60202754626aea0f30473f09) 的用户,我想从 cardArray 和 loginIdsArray 中获取所有对象,其 isFavourite 值 == true

我确实应用了这段代码,但在 console.log(ans) 是空数组 []。此代码也适用于 loginidsArray。如何一次从两个数组中获取所有值

  const ans = await UserDatabase.aggregate([
      { $match: { _id: req.query.user_id } },
      {
        $project: {
          loginIdsArray: {
            $filter: {
              input: "$loginIdsArray",
              as: "item",
              cond: { $eq: ["$$item.isFavourite", true] },
            },
          },
        },
      },
    ]);
    // console.log("fetched fav", response);
    console.log("ans", ans);

{
  "_id": "60202754626aea0f30473f09",
  "name": "Praveen Lohar",
  "email": "prvnlhr1@gmail.com",
  "password": "$2a$12$031HBBwJSaAzZ8TK4jkqTOBI0jUQcUuKbMk2UPZyFLRmWlFveJBZm",
  "cardsArray": [
    {
    "isFavourite": false,
    "_id": "60202538445530b28525df55d",
    "user": "Thor ",
    "bank": "Bank of Asgard",
    "cardNo": "551157766323",
    "expiry": "02/35",
    "cvv": "522325",
    "pin": "23",
},
  , {
      "isFavourite": false,
      "_id": "602025380475d30b2840dd84",
      "user": "Pepper Pots",
      "bank": "Bank of NewYork",
      "cardNo": "578454412312121",
      "expiry": "02/35",
      "cvv": "525",
      "pin": "45455",
  }],

  "loginIdsArray": [
    {
      "isFavourite": false,
      "_id": "602004abef310e0ee4c36319",
      "website": "Google",
      "username": "stark.Server122",
      "password": "55412pponj88"
  }, {
      "isFavourite": true,
      "_id": "60200fb9e79d5126b45594eb",
      "website": "Facebook",
      "username": "prvnlhr007@gmail.com",
      "password": "545121fdfnjfdnfdkjnd"
  }, {
      "isFavourite": false,
      "_id": "602013c570b26d0fdcb17a7e",
      "website": "Github",
      "username": "prvnlhr007@gmail.com",
      "password": "545121fdfnjfdnfdkjnd"
  }, {
      "isFavourite": true,
      "_id":"602013d570b26d0fdcb17a7f",
      "website": "Instagram",
      "username": "iamlohar007@gmail.com",
      "password": "545121fdfnjfdnfdkjnd"
  }],
  "__v": {
      "$numberInt": "0"
  }
}

标签: javascriptnode.jsreactjsmongodbmongoose

解决方案


您的聚合看起来不错 - 在这里演示https://mongoplayground.net/p/GX-k5W4Pbhe

因此,它看起来好像没有找到该文档。也许您使用的是 native ObjectIDs_id而不是字符串,因此您的$match查询应该是:

{ $match: { _id: mongoose.Types.ObjectId(req.query.user_id) } }

如此处所述 https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate


推荐阅读