猫鼬发现100%与对象

问题描述

我目前在我的项目中使用猫鼬,并且我使用猫鼬查找来查询完全符合我在对象中定义的100%的文档。这是我的路由器定义:

router.get('/warned-students/:classname/:schoolYear/:semester',get_warned_students)

这是我输入的链接

http://localhost:5000/students/warned-students/k61caclc1/2016/1
如您所见,它收到了3个参数类名,schoolYear和学期。类名是k61clc1,choolYear是2016,学期是1。

这是我的控制器

const Student = require('../models/student')

exports.get_warned_students = (req,res,next) => {
  const { classname,schoolYear,semester } = req.params

  Student.find({
    classname,'accademicTrainningList.schoolYear': schoolYear,'accademicTrainningList.semester': semester,'accademicTrainningList.classification': 'Weak'
  })
    .exec()
    .then(students => {
      res.status(200).json({ size: students.length,students })
    })
    .catch(err => {
      console.log('error in finding warned students')
      res.status(500).json({ err })
    })
}

它起作用了,但是没有返回我期望的结果:

{
    "size": 14,"students": [
        {
            "gender": "No Record","profileImage": "https://kittyinpink.co.uk/wp-content/uploads/2016/12/facebook-default-photo-male_1-1.jpg","_id": "5f603a126d633e75884e9e1b","fullname": "Trịnh Phan Anh ","birthday": "19/09/1997 ","classname": "k61caclc1","code": "16020508","vnumail": "16020508@vnu.edu.vn","accademicTrainningList": [
                {
                    "semester": "1","classification": "Good","_id": "5f603a126d633e75884e9dc0","score": 80,"schoolYear": "2016"
                },{
                    "semester": "2","classification": "Weak","_id": "5f603b1f3bd07d5cb4d6fea9","score": 53,"schoolYear": "2016"
                }
            ],"scoreList": [],"receiveScholarship": [],"prizeList": [],"scienceContestPrizeList": [],"wentAbroad": [],"tookTheTest": [],"punishList": [],"__v": 0
        },{
            "gender": "No Record","_id": "5f603a126d633e75884e9e1e","fullname": "Đinh Việt Cường ","birthday": "13/03/1996 ","code": "16022255","vnumail": "16022255@vnu.edu.vn","_id": "5f603a126d633e75884e9dc3","_id": "5f603b1f3bd07d5cb4d6feac","score": 56,"_id": "5f603a126d633e75884e9e23","fullname": "Phạm Duy ","birthday": "17/12/1998 ","code": "16020542","vnumail": "16020542@vnu.edu.vn","classification": "Excellent","_id": "5f603a126d633e75884e9dc8","score": 90,"_id": "5f603b1f3bd07d5cb4d6feb1","_id": "5f603a126d633e75884e9e26","fullname": "Đặng Ngọc Đam ","birthday": "26/11/1998 ","code": "16020518","vnumail": "16020518@vnu.edu.vn","_id": "5f603a126d633e75884e9dcb","_id": "5f603b1f3bd07d5cb4d6feb4","score": 55,"_id": "5f603a126d633e75884e9e28","fullname": "Nguyễn Hải Đăng ","birthday": "09/08/1998 ","code": "16020520","vnumail": "16020520@vnu.edu.vn","_id": "5f603a126d633e75884e9dcd","_id": "5f603b1f3bd07d5cb4d6feb6","_id": "5f603a126d633e75884e9e29","birthday": "24/11/1998 ","code": "16020519","vnumail": "16020519@vnu.edu.vn","_id": "5f603a126d633e75884e9dce","_id": "5f603b1f3bd07d5cb4d6feb7","score": 54,"_id": "5f603a126d633e75884e9e2b","fullname": "Đỗ Hồng Giang ","birthday": "29/01/1997 ","code": "16020544","vnumail": "16020544@vnu.edu.vn","_id": "5f603a126d633e75884e9dd0","_id": "5f603b1f3bd07d5cb4d6feb9","score": 57,"_id": "5f603a126d633e75884e9e36","fullname": "Phạm Minh Hiếu ","birthday": "17/10/1998 ","code": "16020373","vnumail": "16020373@vnu.edu.vn","_id": "5f603a126d633e75884e9ddb","_id": "5f603b1f3bd07d5cb4d6fec4","_id": "5f603a126d633e75884e9e38","fullname": "Nguyễn Ngọc Hòa ","birthday": "29/04/1997 ","code": "16020566","vnumail": "16020566@vnu.edu.vn","_id": "5f603a126d633e75884e9ddd","_id": "5f603b1f3bd07d5cb4d6fec6","_id": "5f603a126d633e75884e9e3b","fullname": "Trần Hữu Hoàn ","birthday": "25/11/1998 ","code": "16022471","vnumail": "16022471@vnu.edu.vn","_id": "5f603a126d633e75884e9de0","_id": "5f603b1f3bd07d5cb4d6fec9","score": 59,"_id": "5f603a126d633e75884e9e3e","fullname": "Nguyễn Tấn Hoàng ","birthday": "06/01/1998 ","code": "16022261","vnumail": "16022261@vnu.edu.vn","_id": "5f603a126d633e75884e9de3","_id": "5f603b1f3bd07d5cb4d6fecc","score": 50,"_id": "5f603a126d633e75884e9e47","fullname": "Nguyễn Trung Kiên ","birthday": "18/09/1998 ","code": "16020588","vnumail": "16020588@vnu.edu.vn","classification": "Intermediate","_id": "5f603a126d633e75884e9dec","score": 75,"_id": "5f603b1f3bd07d5cb4d6fed5","_id": "5f603a126d633e75884e9e52","fullname": "Nguyễn Văn Mạnh ","birthday": "07/07/1998 ","code": "16020606","vnumail": "16020606@vnu.edu.vn","_id": "5f603a126d633e75884e9df7","_id": "5f603b1f3bd07d5cb4d6fee0","_id": "5f603a126d633e75884e9e60","fullname": "Tạ Văn Quỳnh ","birthday": "06/12/1998 ","code": "16020637","vnumail": "16020637@vnu.edu.vn","_id": "5f603a126d633e75884e9e05","_id": "5f603b1f3bd07d5cb4d6feee","__v": 0
        }
    ]
}

如您所见,它返回包含3个属性中的1个的结果,但是我想要的是它仅返回包含所有3个属性的结果。谢谢你的帮助,祝你有美好的一天 更新

这就是我的期望:数组“ accademicTrainningList”包含一个适合所有3个属性学校的元素年份:2016,学期:1和分类:弱

{
            "gender": "No Record",

否则,如果没有匹配项,则返回一个空数组

解决方法

您似乎需要$elemMatch。在您的情况下,查询将类似于:

Student.find({
  classname: "k61caclc1",accademicTrainningList: {
    $elemMatch: {
      semester: "1",schoolYear: "2016",classification: "Weak"
    }
  }
})

Mongo Playground