2013-07-22 107 views
1

返回數組的最大值與總的請求你好,我有這樣的jsonMongoDB中

db.people.insert({ 
    "ad" : "noc2", 
    "createdDate" : ISODate(), 
    "list" : [ 
      { 
        "id" : "p45", 
        "date" : ISODate("2014-01-01T12:18:30.568Z"), 
        "value3" : 21, 
        "value1" : 77, 
        "value2" : 489 
      }, 
      { 
        "id" : "p6", 
        "date" : ISODate("2013-07-18T12:18:30.568Z"), 
        "value3" : 20, 
        "value1" : 20, 
        "value2" : 7 
      }, 
      { 
        "id" : "4578", 
        "date" : ISODate("2013-07-18T12:18:30.568Z"), 
        "value3" : 21, 
        "value1" : 300, 
        "value2" : -319 
      } 
    ] 

})

,我想拿到我陣列的最大值。例如,我希望有一個JSON作爲 這樣的:

「結果」: { 「_id」: 「P45」, 「值」:587 } ]

和我的總要求誰不工作是: db.test1.aggregate({$match: "ad":"noc2"},{$unwind: '$list'},{$group: {_id: '$ad', list: {recommand: {$max: '$list'}}}});

回答

1

答案在查詢語法中包含了幾個問題,但大多數情況下它的工作原理。下面你可以找到固定的查詢:

db.people.aggregate(
    {$match:{ad:"noc2"}}, 
    {$unwind:"$list"}, 
    {$project:{_id:0, _id:"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}}, 
    {$sort:{value:-1}}, 
    {$limit:1} 
); 
+0

感謝您的回覆,但如果我有太多的價值,我怎麼能不寫所有值在我的數組?因爲我不能這樣做,因爲我必須保留價值的名稱和價值,價值的名稱可以改變。其次,它可能是我有五萬個值 – jonn

+0

對不起,我錯了,非常感謝,你的回答很好 ;) – jonn

1

試試這個:

db.people.aggregate([ 
    {$match:{ad:"noc2"}}, 
    {$unwind:"$list"}, 
    {$project:{_id:0, _id":"$list.id", "value":{$add:["$list.value1","$list.value2","$list.value3"]}}}, 
    {$sort:{value:-1}, 
    {$limit:1} 
]) 

輸出:

{ "result" : [ { "_id" : "p45", "value" : 587 } ], "ok" : 1 } 
+0

感謝您的答覆,但如果我有太多的價值,我怎麼能在沒有我的陣列寫入所有的值嗎? – jonn

+0

也許最好將它們全部放在一個數組中,比如'「values」:[21,77,489,...]'然後將它們相加... –

+0

我不能這樣做因爲我必須保留價值的名稱和價值,價值的名稱可以改變。其次,可能是我有五萬個價值觀。 – jonn