Заполните определенные поля в $ lookup - PullRequest
0 голосов
/ 08 декабря 2018

Я использую агрегат для группировки и заполнения результата, как показано ниже:

 { 
   "$group": {
     "_id": "$userId",
     "projectId": { "$push": "$projectId" }
    }
 },
 { 
  "$lookup": {
     "from": "users",
     "localField": "_id",
     "foreignField": "_id",
      "as": "user"
   }
 },
 {   $unwind:"$user" },
 { 
   "$lookup": {
     "from": "projects",
     "localField": "projectId",
     "foreignField": "_id",
     "as": "projects"
    }
 }

Но я хочу заполнить определенные поля из этого результата Для этого я пробовал $ project, но этообъединение projectId в один массив и projectName в другой массив. Ниже приведен мой результат json:

[
  {
    "_id": "5c0a29e597e71a0d28b910aa",
    "projectId": [
        "5c0a2a8897e71a0d28b910ac",
        "5c0a4083753a321c6c4ee024"
    ],
    "user": {
        "_id": "5c0a29e597e71a0d28b910aa",
        "firstName": "Amit"
        "lastName": "kumar",
        "type": "developer",
        "status": "active"
    },
    "projects": [
        {
            "_id": "5c0a2a8897e71a0d28b910ac",
            "skypeId": "",
            "projectName": "LN-PM",
            "status": "ongoing",
            "assignId": "5c0a2a0a97e71a0d28b910ab"
        },
        {
            "_id": "5c0a4083753a321c6c4ee024",
            "skypeId": "",
            "status": "pending",
            "assignId": "5c0a2a0a97e71a0d28b910ab"
        }
    ]
  }
]

Теперь я хочу получить единственное поле "firstName and _id" от пользователя поле и "имя_проекта и _id" поле из проектов поле

1 Ответ

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

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

С более новым синтаксисом $lookup, который вы можете использовать $project ион внутри $lookup трубопровод

db.collection.aggregate([
  { "$group": {
    "_id": "$userId",
    "projectId": { "$push": "$projectId" }
  }},
  { "$lookup": {
    "from": "users",
    "let": { "userId": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$_id", "$$userId" ] }}},
      { "$project": { "firstName": 1 }}
    ],
    "as": "user"
  }},
  { "$unwind": "$user" },
  { "$lookup": {
    "from": "projects",
    "let": { "projectId": "$projectId" },
    "pipeline": [
      { "$match": { "$expr": { "$in": [ "$_id", "$$projectId" ] }}},
      { "$project": { "projectName": 1 }}
    ],
    "as": "projects"
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...