2016-05-24 1 views
0

У меня есть этот совокупный запрос:

$paroles_query = array(
      array(
       '$match' => array(
        'metadata.content_type' => 'parole', 
        'metadata.yearmonthday' => array(
         '$gte' => $ymd_begin,//20160516 
         '$lt' => $ymd_end //20160522 
        ), 
       ), 
      ), 

     array(
      '$project' => array(
       'yearmonthday' => '$metadata.yearmonthday', 
       'content_id' => '$metadata.content_id', 
       'total' => array(
        '$add' => $add, 
       ), 
      ), 
     ), 

     array(
      '$sort' => array(
       'total' => -1, 
      ), 
     ), 
     array(
      '$group' => array(
       '_id' => '$content_id', 
       'total' => array('$sum' => '$total') 
      ), 
     ), 
     array(
      '$limit' => 10, 
     ) 
    ); 

Все работает отлично, и я получаю мой результат, но $ лимитов этапа не работает, так что я получил 150 000 документы вместо 10.

Я пробовал ['$limt' => 10] синтаксис, но не из этих решений работают для меня. может помочь enyone? большой thx заранее

UPDATE: '$ sort' также не работает.

UPDATE: Вот один из моих документов:

{ 
"_id" : ObjectId("5740a27af32d054114687c65"), 
"metadata" : { 
    "app" : "web", 
    "content_id" : "106366780", 
    "content_type" : "traduction", 
    "yearmonthday" : 20160521, 
    "device_id" : "9615b7451e0031e15fcbc5c064418a8abb2740dd", 
    "notification_channel" : "web", 
    "year" : 2016, 
    "month" : 5, 
    "day" : 21, 
    "hour" : 23, 
    "minute" : 24, 
    "weekday" : 6, 
    "yearmonth" : 201605 
}, 
"hourly" : { 
    "18" : 1, 
    "23" : 1 
}, 
"minute" : { 
    "18" : { 
     "1" : 1 
    }, 
    "23" : { 
     "24" : 1 
    } 
}, 
"new" : { 
    "hourly" : { 
     "18" : 1, 
     "23" : 1 
    }, 
    "minute" : { 
     "18" : { 
      "1" : 1 
     }, 
     "23" : { 
      "24" : 1 
     } 
    } 
} 

}

А вот запрос MongoDB (это отлично работает):

db.getCollection('visitors_daily').aggregate({$match : {"metadata.content_type" : "parole", "metadata.yearmonthday" : { $gte : 20160516, $lt: 20160523}}},{$project : { total :{$add : [{$ifNull : ["$hourly.0",0]},{$ifNull : ["$hourly.1",0]},{$ifNull : ["$hourly.2",0]},{$ifNull : ["$hourly.3",0]},{$ifNull : ["$hourly.4",0]},{$ifNull : ["$hourly.5",0]},{$ifNull : ["$hourly.6",0]},{$ifNull : ["$hourly.7",0]},{$ifNull : ["$hourly.8",0]},{$ifNull : ["$hourly.9",0]},{$ifNull : ["$hourly.10",0]},{$ifNull : ["$hourly.11",0]},{$ifNull : ["$hourly.12",0]},{$ifNull : ["$hourly.13",0]},{$ifNull : ["$hourly.14",0]},{$ifNull : ["$hourly.15",0]},{$ifNull : ["$hourly.16",0]},{$ifNull : ["$hourly.17",0]},{$ifNull : ["$hourly.18",0]},{$ifNull : ["$hourly.19",0]},{$ifNull : ["$hourly.20",0]},{$ifNull : ["$hourly.21",0]},{$ifNull : ["$hourly.22",0]},{$ifNull : ["$hourly.23",0]}]},ymd : "$metadata.yearmonthday" , content_id :"$metadata.content_id"}},{$group : {_id : "$content_id","total" : {$sum : "$total"}}}, {$sort : {"total" : -1}}) 

Этот запрос для извлечения количество посещений на тип страницы (content_type) в диапазоне дат (на основе metadata.yearmonthday), это мой первый результат в mongo db:

{ 
    "_id" : "104846552", 
    "total" : 227 
} 

/* 2 */ 
{ 
    "_id" : "100611974", 
    "total" : 151 
} 

/* 3 */ 
{ 
    "_id" : "107373971", 
    "total" : 127 
} 

/* 4 */ 
{ 
    "_id" : "1766982", 
    "total" : 124 
} 

/* 5 */ 
{ 
    "_id" : "100842840", 
    "total" : 115 
} 
+0

Похоже, что слишком много запятых в массивах. – JST

+0

@JST С запятыми или без них результат кажется таким же! –

+0

В чем причина установки массива «конвейер» '$ limit' ( '$ limit' => 5, )' сразу после шага '$ project'? а затем сделать другой '$ limit' в конце? – chridam

ответ

0

DAMMMMNN, отсутствие ошибок в запросе, это было Nginx .... THX ребята

 Смежные вопросы

  • Нет связанных вопросов^_^