Mongoose의 쿼리를 통해 포함 된 문서의 필터링 된 결과를 반환하는 방법

슈레 야 쿠마르

주 문서의 다른 배열에 포함 된 배열 안에 특정 문서 만 반환 할 수있는 쿼리를 찾고 있습니다. 다음은 DB에 저장된 컬렉션입니다.

{
    "List": {
        "_id": "5ee1c1e6739bb23e3c54d35c",
        "capitalAccountID": "CaptialAccount-43",
        "userEmail": "[email protected]",
        "flagID": 1,
        "ledgerName": "Capital Account",
        "subLedgers": [
            {
                "openingBalance": 100000,
                "closingBalance": 90001,
                "transactions": [
                    {
                        "_id": "5ee1c1e6739bb23e3c54d35e",
                        "transactionID": "123456",
                        "date": "09/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 0,
                        "debit": 1
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d35f",
                        "transactionID": "123457",
                        "date": "10/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d360",
                        "transactionID": "123458",
                        "date": "11/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    }
                ],
                "_id": "5ee1c1e6739bb23e3c54d35d",
                "subLedgerID": 1,
                "subLedgerName": "ABC",
                "reference": "dghj",
                "rateOfDuty": 10,
                "gstApplicable": true
            },
            {
                "openingBalance": 100000,
                "closingBalance": 95001,
                "transactions": [
                    {
                        "_id": "5ee1c1e6739bb23e3c54d362",
                        "transactionID": "123459",
                        "date": "13/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 0,
                        "debit": 1
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d363",
                        "transactionID": "123450",
                        "date": "14/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d364",
                        "transactionID": "123451",
                        "date": "15/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d365",
                        "transactionID": "123452",
                        "date": "16/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 0,
                        "debit": 5000
                    }
                ],
                "_id": "5ee1c1e6739bb23e3c54d361",
                "subLedgerID": 2,
                "subLedgerName": "DEF",
                "reference": "dohj",
                "rateOfDuty": 10,
                "gstApplicable": true
            }
        ],
        "idCounter": 43,
        "__v": 0
    }
}

아래 코드는 위의 결과를 반환합니다.

await CaptialAccount.findOne(
    {
      userEmail: req.body.userEmail,
    },
    (err, list) => {
      res.status(200).json({
        List: list
      })
    }
  );

날짜를 기준으로 "subLedgers"배열 내부의 "transactions"배열을 필터링해야합니다. 예 : "09/06/2020"에서 "13/06/2020"까지. 예상 출력 :

{
    "List": {
        "_id": "5ee1c1e6739bb23e3c54d35c",
        "capitalAccountID": "CaptialAccount-43",
        "userEmail": "[email protected]",
        "flagID": 1,
        "ledgerName": "Capital Account",
        "subLedgers": [
            {
                "openingBalance": 100000,
                "closingBalance": 90001,
                "transactions": [
                    {
                        "_id": "5ee1c1e6739bb23e3c54d35e",
                        "transactionID": "123456",
                        "date": "09/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 0,
                        "debit": 1
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d35f",
                        "transactionID": "123457",
                        "date": "10/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    },
                    {
                        "_id": "5ee1c1e6739bb23e3c54d360",
                        "transactionID": "123458",
                        "date": "11/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 5000,
                        "debit": 0
                    }
                ],
                "_id": "5ee1c1e6739bb23e3c54d35d",
                "subLedgerID": 1,
                "subLedgerName": "ABC",
                "reference": "dghj",
                "rateOfDuty": 10,
                "gstApplicable": true
            },
            {
                "openingBalance": 100000,
                "closingBalance": 95001,
                "transactions": [
                    {
                        "_id": "5ee1c1e6739bb23e3c54d362",
                        "transactionID": "123459",
                        "date": "13/06/2020",
                        "particulars": "By-sales",
                        "voucherNumber": "asdfghjk",
                        "voucherType": "SR",
                        "credit": 0,
                        "debit": 1
                    }
                ],
                "_id": "5ee1c1e6739bb23e3c54d361",
                "subLedgerID": 2,
                "subLedgerName": "DEF",
                "reference": "dohj",
                "rateOfDuty": 10,
                "gstApplicable": true
            }
        ],
        "idCounter": 43,
        "__v": 0
    }
}

이를 달성하기위한 쿼리가 있습니까? 감사합니다.

Tom Slabbaert

이를 위해 $ filter를 활용하여 파이프 라인을 사용해야합니다 . $ elemMatch에 해당하는 쿼리 는 조건과 일치하는 배열의 첫 번째 항목을 반환하는 데만 사용할 수 있습니다.

db.collection.aggregate([
    {
        $match: {
            userEmail: req.body.userEmail,
        }
    },
    {
        $addFields: {
            "List.subLedgers": {
                $map: {
                    input: "$List.subLedgers",
                    as: "subLedger",
                    in: {
                        $mergeObjects: ["$$subLedger", {
                            transactions: {
                                $filter: {
                                    input: "$$subLedger.transactions",
                                    as: "transaction",
                                    cond: {
                                        $and: [
                                            {
                                                $gte: ["$$transaction.date", "start date"]
                                            },

                                            {
                                                $lte: ["$$transaction.date", "end date"]
                                            }
                                        ]
                                    }
                                }
                            }
                        }]
                    }
                }
            }
        }
    }
])

거래 날짜가 문자열로 저장되는 것처럼 보이지만 모두 동일한 시간대와 형식으로되어 있다는 것을 보장 할 수있는 한 좋지 않습니다. 그렇지 않으면 예기치 않은 결과를 얻을 수 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Vue 앱이 정의되지 않은 결과를 반환하는 필터링 된 API 결과를 해결하는 방법은 무엇입니까?

분류에서Dev

angularjs 팩토리에서 해결 된 후 함수의 결과를 반환하는 방법

분류에서Dev

쿼리에 포함 된 레일 모델의 결과 필터링

분류에서Dev

0 개의 결과를 반환하는 필터링 된 데이터의 각 루프에 대해 오류 없음

분류에서Dev

HTML 문서에 포함 된 일련의 JavaScript 번호를 해결하는 방법

분류에서Dev

mem_fn에 의해 생성 된 함수 포인터의 결과를 부정하는 방법

분류에서Dev

DB 테이블에서 데이터를 반환하는 Angular의 HttpClient를 통해 반환 된 RxJS 데이터를 통해 필터링하려고합니다.

분류에서Dev

Mongoose를 통해 MongoDB의 다른 문서에 포함 된 문서 사본 저장

분류에서Dev

MongoDB의 배열에 포함 된 문서를 가져 오는 방법 (Mongoose 사용)

분류에서Dev

rdf 데이터가있는 Stardog 서버를 통해 쿼리 된 데이터를 반환 할 수없는 Graphql의 비동기 함수 해결

분류에서Dev

지정된 유형의 중첩 된 객체를 포함하는 문서에 대해 RavenDB를 쿼리하는 방법

분류에서Dev

필드 이름으로 정렬 된 포함 문서를 반환하는 방법

분류에서Dev

Multi_Match를 사용하는 필터링 된 쿼리를 공통 용어를 사용하는 필터링 된 쿼리로 변환하는 방법

분류에서Dev

쿼리의 계산 된 열을 필터링하고 매핑 된 엔터티를 유지하는 방법

분류에서Dev

방향 변경을 통해 필터링 된 CursorAdapter의 상태를 유지하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL : SQL SELECT 문의 결과로 반환 된 ALTER 쿼리를 실행하는 방법

분류에서Dev

함수를 통해 포함 된 PHP가 주 파일의 PHP와 다른 결과를 반환하는 이유는 무엇입니까?

분류에서Dev

MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

분류에서Dev

Elasticsearch 또는 필터링 된 쿼리가 결과를 반환하지 않음

분류에서Dev

필드에 검색 구문이 포함 된 결과를 높이는 방법

분류에서Dev

Mongoose : 중첩 된 문서를 쿼리하고 문자열 결과를 반환하는 방법은 무엇입니까?

분류에서Dev

MySQL의 select 문에서 결과를 필터링하는 방법

분류에서Dev

Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

분류에서Dev

Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

분류에서Dev

forkJoin에서 처리 된 결과를 반환하는 방법

분류에서Dev

Pandas 데이터 프레임에 포함 된 spaCy 토큰 화 된 텍스트의 불용어를 필터링하는 방법

분류에서Dev

직렬 포트를 통해 격리 된 컴퓨터의 콘솔에 연결하도록 OpenSSH 서버를 구성하는 방법은 무엇입니까?

분류에서Dev

bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

분류에서Dev

bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

Related 관련 기사

  1. 1

    Vue 앱이 정의되지 않은 결과를 반환하는 필터링 된 API 결과를 해결하는 방법은 무엇입니까?

  2. 2

    angularjs 팩토리에서 해결 된 후 함수의 결과를 반환하는 방법

  3. 3

    쿼리에 포함 된 레일 모델의 결과 필터링

  4. 4

    0 개의 결과를 반환하는 필터링 된 데이터의 각 루프에 대해 오류 없음

  5. 5

    HTML 문서에 포함 된 일련의 JavaScript 번호를 해결하는 방법

  6. 6

    mem_fn에 의해 생성 된 함수 포인터의 결과를 부정하는 방법

  7. 7

    DB 테이블에서 데이터를 반환하는 Angular의 HttpClient를 통해 반환 된 RxJS 데이터를 통해 필터링하려고합니다.

  8. 8

    Mongoose를 통해 MongoDB의 다른 문서에 포함 된 문서 사본 저장

  9. 9

    MongoDB의 배열에 포함 된 문서를 가져 오는 방법 (Mongoose 사용)

  10. 10

    rdf 데이터가있는 Stardog 서버를 통해 쿼리 된 데이터를 반환 할 수없는 Graphql의 비동기 함수 해결

  11. 11

    지정된 유형의 중첩 된 객체를 포함하는 문서에 대해 RavenDB를 쿼리하는 방법

  12. 12

    필드 이름으로 정렬 된 포함 문서를 반환하는 방법

  13. 13

    Multi_Match를 사용하는 필터링 된 쿼리를 공통 용어를 사용하는 필터링 된 쿼리로 변환하는 방법

  14. 14

    쿼리의 계산 된 열을 필터링하고 매핑 된 엔터티를 유지하는 방법

  15. 15

    방향 변경을 통해 필터링 된 CursorAdapter의 상태를 유지하는 방법은 무엇입니까?

  16. 16

    PostgreSQL : SQL SELECT 문의 결과로 반환 된 ALTER 쿼리를 실행하는 방법

  17. 17

    함수를 통해 포함 된 PHP가 주 파일의 PHP와 다른 결과를 반환하는 이유는 무엇입니까?

  18. 18

    MongoDB의 배열에 포함 된 단일 문서를 쿼리하는 방법은 무엇입니까?

  19. 19

    Elasticsearch 또는 필터링 된 쿼리가 결과를 반환하지 않음

  20. 20

    필드에 검색 구문이 포함 된 결과를 높이는 방법

  21. 21

    Mongoose : 중첩 된 문서를 쿼리하고 문자열 결과를 반환하는 방법은 무엇입니까?

  22. 22

    MySQL의 select 문에서 결과를 필터링하는 방법

  23. 23

    Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

  24. 24

    Node.js에서 Mongoose를 통해 두 개의 콜백 호출을 통해 생성 된 문자열을 연결하는 방법은 무엇입니까?

  25. 25

    forkJoin에서 처리 된 결과를 반환하는 방법

  26. 26

    Pandas 데이터 프레임에 포함 된 spaCy 토큰 화 된 텍스트의 불용어를 필터링하는 방법

  27. 27

    직렬 포트를 통해 격리 된 컴퓨터의 콘솔에 연결하도록 OpenSSH 서버를 구성하는 방법은 무엇입니까?

  28. 28

    bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

  29. 29

    bool이 포함 된 탄력적 검색 필터 쿼리가 잘못된 결과를 반환 함

뜨겁다태그

보관