Mongodb Mongo查询-查找文档中的最小值

Mongodb Mongo查询-查找文档中的最小值,mongodb,Mongodb,我想在mongoDB文档中找到最小值: 样本文件 db.marks.insert({"name" : "John", "subject1" : 100, "subject2" : 98, "subject3" : 99, "subject4" : 97}); 我想在每个文档中找到subject1、subject2、subject3、subject4的最小值。尝试为此使用聚合框架,但它似乎可以跨文档工作。有没有办法在文档中找到价值 您可以按以下方式进行聚合: $group按名称将主题字段转换为

我想在mongoDB文档中找到最小值:

样本文件

db.marks.insert({"name" : "John", "subject1" : 100, "subject2" : 98, "subject3" : 99, "subject4" : 97});

我想在每个文档中找到
subject1、subject2、subject3、subject4
的最小值。尝试为此使用聚合框架,但它似乎可以跨文档工作。有没有办法在文档中找到价值

您可以按以下方式进行聚合:

  • $group
    按名称将主题字段转换为数组
  • $project
    一个名为
    score
    的字段,作为每个人所有分数的
    $setUnion
  • $unwind
    记录
    数组
  • $group
    再次按姓名查找
    $min
    每人得分
代码:


你能改变你的数据模型吗?像{name:'John',subjects:[{name:'subject1',mark:100},{name:'subject2',mark:98}}这样的东西会让事情简单得多。我可以做到。但我能和其他领域一起得到最低分数吗?我建议这个模型更容易找到所有学科的最低分数。如果您想为每个子文档添加其他信息,请继续。我可以执行mongo查询以从您建议的数据模型中获取最低值吗?是的,使用聚合框架进行此操作将非常简单。
db.marks.aggregate([
{$group:{"_id":"$name",
         "subject1":{$push:"$subject1"},
         "subject2":{$push:"$subject2"},
         "subject3":{$push:"$subject3"},
         "subject4":{$push:"$subject4"}}},
{$project:{"score":{$setUnion:["$subject1",
                               "$subject2",
                               "$subject3",
                               "$subject4"]}}},
{$unwind:"$score"},
{$group:{"_id":"$_id","minScore":{$min:"$score"}}}
])