2013-05-29 31 views
0

找到最低的元素我有一个集合的学生是这样的:MongoDB的:在嵌入式阵列

{ 
    "_id" : 10, 
    "name" : "Christiano Ronaldo", 
    "scores" : [ 
      { 
        "type" : "exam", 
        "score" : 40.58945534169687 
      }, 
      { 
        "type" : "quiz", 
        "score" : 4.30461571152303 
      }, 
      { 
        "type" : "homework", 
        "score" : 62.36309025722009 
      }, 
      { 
        "type" : "homework", 
        "score" : 32.1707802903173 
      } 
    ] 

}

如何找到最低的功课?使用javadriver。

+1

顺便说一下,许多人都在为这个特定的数据模型问题而苦苦挣扎,这不是一个假设。新的家庭作业? ;)示例:http://stackoverflow.com/questions/16806348/mongodb-selecting-record-based-on-two-conditions –

+0

大多数新手都非常挣扎。是的,这是一个任务;) – Diganta

+0

啊,没问题;) –

回答

3

你不用正常的查询。您始终查询完整文档而不是该文档中的嵌入元素。如果你为每个单独的分文件,e.g:

{ 
    "_id" : 10, 
    "name" : "Christiano Ronaldo", 
    "type" : "exam", 
    "score" : 40.58945534169687 
} 

您可以搜索最高/最低考试成绩为克里斯蒂亚诺·罗纳尔多。请注意,MongoDB Aggregation Framework可以用来回答你的问题,但我会假设这里超出了范围。

另请注意,您的模式是非常有问题的。无法使用此模式查询特定的“作业”分数。我会在这里进行规范化处理并为每个分数使用一个文档。

+0

为解决这个任务它不是一个好主意去规范化模式,因为验证我的答案我必须对我以前的结果运行一个特定的聚合函数。 – Diganta

+0

您可以添加您的原始问题预期的结果应该是什么?你说“找到最低的家庭作业”,但这是什么意思?整个集合中功能最低的文档或文档中功能最低的数组元素? –

+1

难道你不能使用$ elemMatch来获得类型:'家庭作业'?例如从shell:db.students.find({},{scores:{$ elemMatch:{type:'homework'}}}) – Jeff