복붙노트

[MONGODB] MongoDB를 집계 명령 / 파이프 라인에 행 번호의 어떤 종류를 추가

MONGODB

MongoDB를 집계 명령 / 파이프 라인에 행 번호의 어떤 종류를 추가

아이디어는 MongoDB를 집계 명령 / 파이프 라인에 행 번호의 종류를 반환하는 것입니다. 우리는 RDBM로했습니다 무엇 유사합니다.

이 행 / 수에 정확히 일치하는 경우 그것은 중요하지 고유 번호이어야한다.

같은 쿼리 :

  [   { $match: { "author" : { $ne: 1 } }}  , { $limit: 1000000 } ]

반환 :

{ "rownum" : 0, "title" : "The Banquet", "author" : "Dante", "copies" : 2 }
{ "rownum" : 1, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 }
{ "rownum" : 2, "title" : "Eclogues", "author" : "Dante", "copies" : 2 }
{ "rownum" : 3, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 }
{ "rownum" : 4, "title" : "Iliad", "author" : "Homer", "copies" : 10 }

그것은 MongoDB의이 ROWNUM을 생성 할 수 있습니까?

해결법

  1. ==============================

    1.큰 쿼리의 성능에 대한 확인, 그러나 이것은 적어도 옵션입니다하지 않습니다.

    큰 쿼리의 성능에 대한 확인, 그러나 이것은 적어도 옵션입니다하지 않습니다.

    당신은 / 그룹화 같은 includeArrayIndex과 함께 여유를 즐기실 다음 밀어하여 배열에 결과를 추가 할 수 있습니다 :

    [
      {$match: {author: {$ne: 1}}},
      {$limit: 10000},
      {$group: {
        _id: 1,
        book: {$push: {title: '$title', author: '$author', copies: '$copies'}}
      }},
      {$unwind: {path: '$book', includeArrayIndex: 'rownum'}},
      {$project: {
        author: '$book.author',
        title: '$book.title',
        copies: '$book.copies',
        rownum: 1
      }}
    ]
    

    데이터베이스 레코드의 큰 금액을 포함, 당신은 PAGINATE하려는 경우 지금, 당신은 무대와 페이지 당 표시 할대로 다음 $ 한계 10 또는 20를 건너 뛰 $를 사용할 수 있으며, 단지 $에서 번호를 추가 건너 뛰기 당신의 ROWNUM에 무대와 당신이 그들을 열거하는 모든 결과를 밀어하지 않고 실제 위치를 얻을 수 있습니다.

  2. from https://stackoverflow.com/questions/35174554/add-some-kind-of-row-number-to-a-mongodb-aggregate-command-pipeline by cc-by-sa and MIT license