복붙노트

[MONGODB] MongoDB의 : 중첩 된 배열 필터링을 발견하고 findOne

MONGODB

MongoDB의 : 중첩 된 배열 필터링을 발견하고 findOne

이 작은 작업은 어렵게 생각보다 밝혀졌다.

다음과 같은 매우 간단한 글 모음을 고려하십시오. 내가 삭제되지 않은 경우에만 의견과 함께 모든 게시물을 표시 할 가정하자.

즉 코멘트 배열에서 삭제 된 의견을 필터링 할 수 있습니다.

나는 포스트 당 삭제 된 댓글의 100 단위를 가지고 있기 때문에,이 서버 측을 할 수있는 방법은 무엇입니까?

컬렉션 :

{
  "author": {},
  "message": "This is post1",
  "comments": [
    {
      "message": "Im number 1!!!",
      "state": {
        "deleted": false
      }
    },
    {
      "message": "YOU MOTHERF****R",
      "state": {
        "deleted": true
      }
    },
    {
      "message": "tHIS IS GREAT!",
      "state": {
        "deleted": false
      }
    },
    {
      "message": "I can type better than you guys",
      "state": {
        "deleted": false
      }
    }
  ]
},
{
  "author": {},
  "message": "This is post 2",
  "comments": [
    {
      "message": "This is bulls**t",
      "state": {
        "deleted": true
      }
    },
    {
      "message": "YOU MOTHERF****R",
      "state": {
        "deleted": true
      }
    },
    {
      "message": "I hate u!",
      "state": {
        "deleted": true
      }
    },
    {
      "message": "I wanna have your children",
      "state": {
        "deleted": false
      }
    }
  ]
}

해결법

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

    1.이 타고의 지옥으로 밝혀졌다 때문에 DR, 나는 TL 것이다. 나는 내가 $ 프로젝트를 시도했습니다, 나는, 나는 집계 프레임 워크를 시도했습니다, $지도를 시도했다 (또한 $$ 현재와 $$ ROOT와) $ 편집하다 해봤 $ elemMatch을 시도했습니다.

    이 타고의 지옥으로 밝혀졌다 때문에 DR, 나는 TL 것이다. 나는 내가 $ 프로젝트를 시도했습니다, 나는, 나는 집계 프레임 워크를 시도했습니다, $지도를 시도했다 (또한 $$ 현재와 $$ ROOT와) $ 편집하다 해봤 $ elemMatch을 시도했습니다.

    당신은 여기에 대한 모든을 읽을 수 있습니다 : https://www.devsbedevin.net/mongodb-find-findone-with-nested-array-filtering-finally/

    이 솔루션은 배열을 필터링하고 그 결과에 주석 속성을 재정의 집계 프레임 워크를 사용하는 것 같다. 그것은 생각보다이 간단하다 :

    db.getCollection('posts').aggregate(
        {$match: {"author.id": authorId}},
        {$addFields : {"comments":{$filter:{ // We override the existing field!
            input: "$comments",
            as: "comment",
            cond: {$eq: ["$$comment.state.deleted", false]}
        }}}}
    );
    

    결과:

    {
      "author": {},
      "message": "This is post1",
      "comments": [
        {
          "message": "Im number 1!!!",
          "state": {
            "deleted": false
          }
        },
        {
          "message": "tHIS IS GREAT!",
          "state": {
            "deleted": false
          }
        },
        {
          "message": "I can type better than you guys",
          "state": {
            "deleted": false
          }
        }
      ]
    },
    {
      "author": {},
      "message": "This is post 2",
      "comments": [
        {
          "message": "I wanna have your children",
          "state": {
            "deleted": false
          }
        }
      ]
    }
    
  2. from https://stackoverflow.com/questions/46323106/mongodb-find-and-findone-with-nested-array-filtering by cc-by-sa and MIT license