2015-10-23 3 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 

я пробовал разные группы/агрегатные запросы до сих пор, но я не мог получить аналогичный результат. мы надеемся, что у одного из вас есть больше опыта монго, чем у меня, и я могу дать мне подсказку о том, как это решить.

+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); 
Смежные вопросы