2015-10-23 98 views
0

我需要構建一個mongo查詢來獲取與下面的sql具有相同結構的集合的結果。mongo相當於sql查詢

click for picture of table structure

我的SQL查詢:

SELECT * FROM (
    SELECT 
    db.date, 
    db.points, 
    db.type, 
    db.name, 
    db.rank, 
    YEARWEEK(db.date) AS year_week 
    FROM _MyDatabase db 
    WHERE 
    db.personId = 100 AND 
    db.date BETWEEN '2012-10-01' AND '2015-09-30' 
    ORDER BY 
    YEARWEEK(db.date), 
    db.type, 
    db.points DESC 
) x 
GROUP BY 
    x.year_week DESC, 
    x.type; 

的結果看起來是這樣的

date   points type name rank year_week 
------------------------------------------------- 
23.10.2014 2000 1 Fish 2 201442 
12.10.2014 2500 1 Fish 2 201441 
16.10.2014 800  2 Fish 2 201441 

到目前爲止,我已經嘗試了不同的組/彙總查詢,但我不能讓一個類似的結果。希望你們中的一個比我有更多的mongo經驗,並且可以給我提示如何解決這個問題。

+1

你能告訴你的模式的樣本? – inspired

+1

請發佈最接近結果的羣組/聚合查詢,以便我們幫助您識別您所犯的錯誤。 – Philipp

+1

您的MySQL查詢正在使用SELECT語言中不在「GROUP BY」中的語言的(錯誤)特性。這被明確記錄爲返回這些列的不確定值。 –

回答

0

你會想是這樣的:

var start = new Date(2012, 9, 1), 
    end = new Date(2015, 8, 30), 
    pipeline = [ 
     { 
      "$match": { 
       "personId": 100, 
       "date": { "$gte": start, "$lte": end } 
      } 
     }, 
     { 
      "$project": { 
       "date": 1, "points": 1, "type": 1, "name": 1, "rank": 1, 
       "year_week": { "$week": "$date" } 
      } 
     }, 
     { 
      "$sort": { 
       "year_week": 1, 
       "type": 1, 
       "points": -1 
      } 
     }, 
     { 
      "$group": { 
       "_id": { 
        "year_week": "$year_week", 
        "type": "$type" 
       } 
      } 
     } 
    ]; 
db.getCollection("_MyDatabase").aggregate(pipeline);