繁体   English   中英

Mongoose select 数组中的特定字段

[英]Mongoose select specific fields from array

我正在尝试减少我的 API 数据大小以删除不需要的数据。 我有这样的模式

const course = mongoose.Schema(
  {
    course_name: { type: String, require: true },
    disabled: { type: String, required: true, default: false },
    subject_ids: [
      {
        type: mongoose.Schema.ObjectId,
        ref: 'subject',
        require: true,
      },
    ],
  },
  { timestamps: true }
);

应用查找查询后,我有这样的数据

 {
        "disabled": "false",
        "subject_ids": [
            {
                "disabled": "false",
                "_id": "60b0bdd5cd7bd635ecf07cd5",
                "subject_name": "CSS",
                "createdAt": "2021-05-28T09:54:29.147Z",
                "updatedAt": "2021-05-28T09:54:29.147Z",
                "__v": 0
            },
            {
                "disabled": "false",
                "_id": "60b0bdd5cd7bd635ecf07cd7",
                "subject_name": "Jquery",
                "createdAt": "2021-05-28T09:54:29.147Z",
                "updatedAt": "2021-05-28T09:54:29.147Z",
                "__v": 0
            }
        ],
        "_id": "60b0e3f3012b2b272432e9f9",
        "course_name": "Data Science",
        "createdAt": "2021-05-28T12:37:07.103Z"
    }

API我试过这样的事情。 我已经从外部数组中删除了数据,但我不知道如何从内部删除它。 我做了很多谷歌搜索,但我没有得到

router.get('/get-course/:status', async (req, res) => {
  try {
    const data = await COURSE.find({})
      .populate('subject_ids')
      .select({ updatedAt: 0, __v: 0 })
      .exec();

    res.json(data);
  } catch (error) {
    res.status(404).json({ err: 1, message: error.message, error });
  }
});

我想要的数据应该是这样的

 {
        "disabled": "false",
        "subject_ids": [
            {
             
                "_id": "60b0bdd5cd7bd635ecf07cd5",
                "subject_name": "CSS",
               
            },
            {
               
                "_id": "60b0bdd5cd7bd635ecf07cd7",
                "subject_name": "Jquery",
              
            }
        ],
        "_id": "60b0e3f3012b2b272432e9f9",
        "course_name": "Data Science",
        "createdAt": "2021-05-28T12:37:07.103Z"
    }

如何从数组中获取特定数据

尝试这个

router.get('/get-course/:status', async (req, res) => {
  try {
    const data = await COURSE.find({})
      .populate('subject_ids')
      .select({ 
        updatedAt: 0, 
        __v: 0,
        subject_ids.disabled: 0,
        subject_ids.createdAt: 0
        subject_ids.updatedAt: 0
        subject_ids.__v: 0
      })
      .exec();
    res.json(data);
  } catch (error) {
    res.status(404).json({ err: 1, message: error.message, error });
  }
});

尝试这个:

populate('subject_ids','subject_name').exec()

你可以使用

router.get('/get-course/:status', async (req, res) => {
  try {
    const data = await COURSE.find({})
      .select("-subject_ids.disabled -subject_ids.createdAt -subject_ids.updatedAt -subject_ids.__v")
      .exec()

    res.json(data);
  } catch (error) {
    res.status(404).json({ err: 1, message: error.message, error });
  }
});

 .select("-parentArray.child")     

排除数组中所有元素的子属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM