【问题标题】:MongoDb find by value in arrayMongoDb 在数组中按值查找
【发布时间】:2017-05-05 13:19:37
【问题描述】:

这是我收藏的模型:

classes:[{
            class:String,
            info:{
                    subjects:[String],
                    students:[{
                        name:String,
                        surname:String,
                        matriculae:Number,
                        path_1:String,
                        path_2:String
                    }],
                    classTeacher:{
                        name:String,
                        surname:String
                    }                   
                }
            }],
    accademicYear:String}];  

我想根据学生的姓名、姓氏和学年检索值“matriculae”。我不能把我的头绕在它周围!感谢帮助。

【问题讨论】:

  • 告诉我们您的尝试
  • 显示你尝试过的......直到现在......
  • 我正在尝试类似:db.collections.find({accademicYear:'value',classes:{info:{students:{$elemMatch:{name:'value}}}});
  • 但事实上我不知道如何移动
  • 您可以从您的收藏中添加一个示例文档吗?

标签: mongodb mongoose


【解决方案1】:

如果你的意思是你想要结果平面格式,试试这个:

 School.aggregate([
    {
        $unwind: '$classes'
    }, {
        $project: {
            accademicYear: 1,
            students: "$classes.info.students"
        }
    }, {
        $unwind: "$students"
    }, {
        $project: {
            accademicYear: 1,
            matriculae: "$students.matriculae",
            name: "$students.name",
            surname: "$students.surname",
        }
    }
    ])

如果类是集合并且学术年在类集合内。另外添加了匹配条件。

db.getCollection('classes').aggregate([{
    $project: {
        accademicYear: 1,
        students: "$info.students"
    }
}, {
    $unwind: "$students"
}, {
    $project: {
        accademicYear: 1,
        matriculae: "$students.matriculae",
        name: "$students.name",
        surname: "$students.surname",
    }
}, {
    $match: {
        name: name,
        surname: surname,
        accademicYear: year

    }

}])

【讨论】:

  • 学校知道收藏名称吗?
  • 是的。类是学校集合的子数组。在您的情况下,类是一个集合?
  • classes 是一个集合,上面的代码将返回该文档中的所有学生。根据上次投影格式化。我只想返回与整个集合的(accademicYear:值)匹配的文档类中的条件(名称:值,姓:值)匹配的学生
  • 如果是这样,你的模型是错误的。 “academicYear”和“classes”是模型的同一级别。如果“classes”字段是集合,academicYear 必须在模型内部。请先修复您的模型。第二个问题,您可以将 $match 字段添加到聚合方法中。你修好模型后我可以添加它。
  • 很抱歉忽略了你的努力,我很忙。我看看是不是模型有问题。但我读过另一个问题link,无法从特定文档中检索字段,将返回完整文档。我通过简单地迭代服务器上的结果,寻找结果匹配并选择我想要的字段来解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
相关资源
最近更新 更多