0

Я использую этот код внутри маршрута:Как я могу передать значение конкретного поля с мангустами агрегате

MyModel.aggregate(
     [ 
      { "$group": { 
        "_id": "$date", 
        "participants": { "$sum": "$participants" }, 
        "peoples": { $sum: 1 } 
       } 
      }, 
     ], 
     function(err, result) { 
      console.log(result) 
     } 
    ......etc...... 

Это агрегационная дата, участник и народы, но я хочу получить доступ к имени поля, и я пытался так:

"_id": "$date", 
"name": "$name", 
"participants": { "$sum": "$participants" }, 
"peoples": { $sum: 1 } 

но возвращается:

{ [MongoError: exception: the group aggregate field 'name' must be defined as an expression inside an object] 
    name: 'MongoError', 
    errmsg: 'exception: the group aggregate field \'some\' must be defined as an expression inside an object', 
    code: 15951, 
    ok: 0 } 

Что я делаю неправильно?

ответ

1

Для этого вам нужен оператор $first. т.е.:

MyModel.aggreagate(
    [ 
     { "$group": { 
      "_id": "$date", 
      "name": { "$first": "$name" }, 
      "participants": { "$sum": "$participants" }, 
      "peoples": { "$sum": 1 } 
     }, 
    ], 
    function(err,results) { 
     // rest of processing. 
    } 
); 

Подождите, что поля «народы» и «участники» также ошибочны. Но это другой вопрос из контекста.

+0

Я так не думаю, что «участники» - это сумма участников с одним и тем же _id, а люди - это сумма выходов с одним и тем же _id. Я не ошибаюсь? –

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