mongodb 채우기와 같은 집계 사용 방법

nline BGO

코드 예제는 Mongo Playground에 있습니다.

https://mongoplayground.net/p/W4Qt4oX0ZRP

다음 문서를 가정하십시오.

[
  {
    _id: "5df1e6f75de2b22f8e6c30e8",
    user: {
      name: "Tom",
      sex: 1,
      age: 23
    },
    dream: [
      {
        label: "engineer",
        industry: "5e06b16fb0670d7538222909",
        type: "5e06b16fb0670d7538222951",

      },
      {
        label: "programmer",
        industry: "5e06b16fb0670d7538222909",
        type: "5e06b16fb0670d7538222951",

      }
    ],
    works: [
      {
        name: "any engineer",
        company: "5dd7fd51b0ae1837a08d00c8",
        skill: [
          "5dc3998e2cf66bad16efd61b",
          "5dc3998e2cf66bad16efd61e"
        ],

      },
      {
        name: "any programmer",
        company: "5dd7fd9db0ae1837a08d00e2",
        skill: [
          "5dd509e05de2b22f8e67e1b7",
          "5dd509e05de2b22f8e67e1bb"
        ],

      }
    ]
  }
]

나는 사용하려고했다 aggregate $lookup $unwind

db.coll.aggregate([
  {
    $unwind: {
      path: "$dream",

    }
  },
  {
    $lookup: {
      from: "industry",
      localField: "dream.industry",
      foreignField: "_id",
      as: "dream.industry"
    },

  },
  {
    $unwind: {
      path: "$dream.industry",

    }
  },
  {
    $lookup: {
      from: "type",
      localField: "dream.type",
      foreignField: "_id",
      as: "dream.type"
    },

  },
  {
    $unwind: {
      path: "$dream.type",

    }
  },
  {
    $unwind: {
      path: "$works",

    }
  },
  {
    $lookup: {
      from: "company",
      localField: "works.company",
      foreignField: "_id",
      as: "works.company"
    },

  },
  {
    $unwind: {
      path: "$works.company",

    }
  },
  {
    $lookup: {
      from: "skill",
      localField: "works.skill",
      foreignField: "_id",
      as: "works.skill"
    },

  },

])

위의 코드를 실행해도 원하는 결과를 얻지 못했습니다!

이것이 내가 기대하는 것입니다

{
  _id: "5df1e6f75de2b22f8e6c30e8",
  user: {
    name: 'Tom',
    sex: 1,
    age: 23
  },
  dream: [
    {
      label: 'engineer',
      industry: {
        _id: "5e06b16fb0670d7538222909",           // Industry doc _id
        name: 'IT',
        createdAt: "2019-12-28T01:35:44.070Z",
        updatedAt: "2019-12-28T01:35:44.070Z"
      },
      type: {
        _id: "5e06b16fb0670d7538222951",           // Type doc _id
        name: 'job',
        createdAt: "2019-12-28T01:35:44.070Z",
        updatedAt: "2019-12-28T01:35:44.070Z"
      },
    },
    {
      label: 'programmer',
      industry: {
        _id: "5e06b16fb0670d7538222909",           // Industry doc _id
        name: 'IT',
        createdAt: "2019-12-28T01:35:44.070Z",
        updatedAt: "2019-12-28T01:35:44.070Z"
      },
      type: {
        _id: "5e06b16fb0670d7538222951",           // Type doc _id
        name: 'job',
        createdAt: "2019-12-28T01:35:44.070Z",
        updatedAt: "2019-12-28T01:35:44.070Z"
      }
    }
  ],
  works: [
    {
      name: 'any engineer',
      company: {
        _id: "5dd7fd51b0ae1837a08d00c8",          // Company doc _id
        name: 'alibaba',
        area: 'CN',
      },
      skill: [
        { 
          _id: "5dc3998e2cf66bad16efd61b",        // Skill doc _id
          name: 'Java' 
        }, 
        { 
          _id: "5dc3998e2cf66bad16efd61e",        // Skill doc _id
          name: 'Php' 
        }, 
      ]
    },
    {
      name: 'any programmer',
      company: {
        _id: "5dd7fd9db0ae1837a08d00e2",           // Company doc _id
        name: 'microsoft',
        area: 'EN',
      },
      skill: [
        { 
          _id: "5dd509e05de2b22f8e67e1b7",           // Skill doc _id
          name: 'Golang' 
        },
        { 
          _id: "5dd509e05de2b22f8e67e1bb",         // Skill doc _id
          name: 'Node.js'
        }
      ]
    },
  ]
}

예상 결과는 dream배열이고 works, 배열이며, dream.industryObjectId에서 문서로 dream.type변경되고, ObjectId에서 문서로 works.company변경되고 , ObjectId에서 문서로 변경되었습니다.

채우기를 사용하면 쉽게 할 수 있습니다

Model.find()
 .populate('dream.industry')
 .populate('dream.type')
 .populate('works.company')
 .populate('works.skill')
 .lean()

나는 다음 질문을 참조

  1. 몽구스 집계 조회 배열 (내 질문과 거의 동일하지만 해결되지 않음)
  2. 배열의 ObjectId에 대한 $ lookup

모두의 도움을 받기를 바랍니다. 감사합니다!

Tom Slabbaert

더 쉽게 만들기 위해 현재 파이프 라인을 변경하지 않고 $group데이터를 재구성하기 위해 끝에 단계를 추가합니다 .

{
    $group: {
        _id: "$_id",
        user: {$first: "$user"},
        dream: {$addToSet: "$dream"},
        works: {$addToSet: "$works"}
    }
}

즉, Mongo 버전 3.6 이상을 사용하는 경우 $ lookup 의 "최신"버전을 사용하여 이러한 모든 것을 피하여 파이프 라인을 좀 더 효율적으로 다시 작성 하는 것이 좋습니다 $unwind.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MongoDB (Mongoose DB)를 사용하여 집계에서 $ lookup으로 채우기를 추가하는 방법

분류에서Dev

Mongodb에서 $ add 집계를 사용하는 방법은 무엇입니까?

분류에서Dev

자바에서 카드 뒤집기와 같은 JButton을 사용하는 방법

분류에서Dev

집계 MongoDB 사용

분류에서Dev

MongoDb 집계 프레임 워크를 사용하여 일일 기록을 계산하는 방법

분류에서Dev

집계를 사용하여 mongodb를 그룹화하는 방법

분류에서Dev

mongodb에서 집계를 사용하는 방법

분류에서Dev

집계 파이프 라인 mongodb에서 $ update / $ set 연산자를 사용하는 방법은 무엇입니까?

분류에서Dev

mongoDB의 중첩 데이터에서 집계 $ lookup을 사용하는 방법은 무엇입니까?

분류에서Dev

mongodb에서 문서를 찾고 집계를 사용하여 속성을 찾는 방법은 무엇입니까?

분류에서Dev

SpringData MongoDB : Spring Aggregation을 사용하여 $ merge 집계를 설명하는 방법은 무엇입니까?

분류에서Dev

mongodb 집계 파이프 라인에서 Javascript 객체를 사용하는 방법은 무엇입니까?

분류에서Dev

MongoDB 집계 파이프 라인에 여러 연산자를 사용하는 방법은 무엇입니까?

분류에서Dev

채우기 및 집계 방법

분류에서Dev

sparkr에서 avg, max 등과 같은 통계 기능을 사용하는 방법

분류에서Dev

MongoDB Java API-샘플 집계를 찾기 쿼리와 결합하는 방법은 무엇입니까?

분류에서Dev

패싯 검색과 같은 MongoDB 집계

분류에서Dev

그룹 및 누산기 단계로 MongoDB 집계를 개선하는 방법은 무엇입니까?

분류에서Dev

사진 편집기의 채우기 방법을 만드는 방법은 무엇입니까?

분류에서Dev

mongodb 및 C #을 사용하여 자식 요소에서 집계 함수를 사용하는 방법은 무엇입니까?

분류에서Dev

MongoDB 집계를 사용하여 날짜별로 그룹화 된 합계 필드 값을 얻는 방법은 무엇입니까?

분류에서Dev

깊은 Mongodb 집계

분류에서Dev

집계를 사용하여 mongoDB에서 그룹을 수행하는 방법

분류에서Dev

mongodb / mongose 집계 코드를 재사용하는 방법이 있습니까?

분류에서Dev

mongodb $ lookup 집계 내에서 NOT IN 배열 조건을 사용하는 방법

분류에서Dev

스프링 데이터 mongodb로 집계를 사용하는 방법

분류에서Dev

몽구스를 사용하여 Mongodb와 집계

분류에서Dev

mongodb에서 집계와 함께 여러 $ lookup 사용

분류에서Dev

Mongodb 집계에서 필드를 다른 필드와 비교하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    MongoDB (Mongoose DB)를 사용하여 집계에서 $ lookup으로 채우기를 추가하는 방법

  2. 2

    Mongodb에서 $ add 집계를 사용하는 방법은 무엇입니까?

  3. 3

    자바에서 카드 뒤집기와 같은 JButton을 사용하는 방법

  4. 4

    집계 MongoDB 사용

  5. 5

    MongoDb 집계 프레임 워크를 사용하여 일일 기록을 계산하는 방법

  6. 6

    집계를 사용하여 mongodb를 그룹화하는 방법

  7. 7

    mongodb에서 집계를 사용하는 방법

  8. 8

    집계 파이프 라인 mongodb에서 $ update / $ set 연산자를 사용하는 방법은 무엇입니까?

  9. 9

    mongoDB의 중첩 데이터에서 집계 $ lookup을 사용하는 방법은 무엇입니까?

  10. 10

    mongodb에서 문서를 찾고 집계를 사용하여 속성을 찾는 방법은 무엇입니까?

  11. 11

    SpringData MongoDB : Spring Aggregation을 사용하여 $ merge 집계를 설명하는 방법은 무엇입니까?

  12. 12

    mongodb 집계 파이프 라인에서 Javascript 객체를 사용하는 방법은 무엇입니까?

  13. 13

    MongoDB 집계 파이프 라인에 여러 연산자를 사용하는 방법은 무엇입니까?

  14. 14

    채우기 및 집계 방법

  15. 15

    sparkr에서 avg, max 등과 같은 통계 기능을 사용하는 방법

  16. 16

    MongoDB Java API-샘플 집계를 찾기 쿼리와 결합하는 방법은 무엇입니까?

  17. 17

    패싯 검색과 같은 MongoDB 집계

  18. 18

    그룹 및 누산기 단계로 MongoDB 집계를 개선하는 방법은 무엇입니까?

  19. 19

    사진 편집기의 채우기 방법을 만드는 방법은 무엇입니까?

  20. 20

    mongodb 및 C #을 사용하여 자식 요소에서 집계 함수를 사용하는 방법은 무엇입니까?

  21. 21

    MongoDB 집계를 사용하여 날짜별로 그룹화 된 합계 필드 값을 얻는 방법은 무엇입니까?

  22. 22

    깊은 Mongodb 집계

  23. 23

    집계를 사용하여 mongoDB에서 그룹을 수행하는 방법

  24. 24

    mongodb / mongose 집계 코드를 재사용하는 방법이 있습니까?

  25. 25

    mongodb $ lookup 집계 내에서 NOT IN 배열 조건을 사용하는 방법

  26. 26

    스프링 데이터 mongodb로 집계를 사용하는 방법

  27. 27

    몽구스를 사용하여 Mongodb와 집계

  28. 28

    mongodb에서 집계와 함께 여러 $ lookup 사용

  29. 29

    Mongodb 집계에서 필드를 다른 필드와 비교하는 방법은 무엇입니까?

뜨겁다태그

보관