2013-05-29 94 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