Заполните поле в агрегации mongodb - PullRequest
0 голосов
/ 11 декабря 2018

Я использую запрос агрегации ниже, чтобы получить данные из двух коллекций:

let condition = {assignId:mongoose.Types.ObjectId(req.params.id)};
Project.aggregate([
    {
      $match: condition  
    },
    {
      "$group":{
        "_id": "$_id"
      }
    },
    { 
      "$lookup": {
        "from": "worksheets",
        "let": { "projectId": "$_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": [ "$projectId", "$$projectId" ] }}},
          { "$group": {_id:"$projectId", totalHours:{"$sum": "$hours"}}}
        ],
        "as": "project"
      }
    }
])
.then((data)=>{
    res.json(data);
})

и получаю следующий результат:

[
 {
    "_id": "5c0a4083753a321c6c4ee024",
    "project": [
        {
            "_id": "5c0a4083753a321c6c4ee024",
            "totalHours": 10
        }
    ]
 },
 {
    "_id": "5c0a2a8897e71a0d28b910ac",
    "project": [
        {
            "_id": "5c0a2a8897e71a0d28b910ac",
            "totalHours": 6
        }
    ]
 }
]

Я хочу заполнить поле _id внутри проектаМассив.Какие изменения мне нужно сделать для этого?

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете использовать ниже агрегации

Project.aggregate([
  { "$match": condition },
  { "$group":{ "_id": "$_id" }},
  { "$lookup": {
    "from": "worksheets",
    "let": { "projectId": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$projectId", "$$projectId" ] }}},
      { "$group": {_id:"$projectId", totalHours:{"$sum": "$hours"}}},
      { "$lookup": {
        "from": "projects",
        "let": { "projectId": "$_id" },
        "pipeline": [
          { "$match": { "$expr": { "$eq": [ "$_id", "$$projectId" ] }}},
          { "$project": { "projectName": 1 }}
        ],
        "as": "project"
      }}
    ],
    "as": "worksheet"
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...