Фильтрация поля массива в AWS DocumentDB - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь отфильтровать поле комментариев данных поста из моего DocumentDB. Вот структура данных

{
    _id: <objectidgoeshere>,
    author: {
        userId: 2,
        handleName: "VladimirPutin"
    }
    postBody: "Lorem ipsum dolor amet",
    comments: [
        {
            commentBody: "Another lorem ipsum",
            author: {
                user_id: 4,
                handleName: "JohnDoe"
            }
            replies: [
                {
                    replyBody: "Reply lorem ipsum",
                    author: {
                        user_id: 1,
                        handleName: "JaneDoe"
                    }
                }
            ]
        },
        {
            commentBody: "Another lorem ipsum 2",
            author: {
                user_id: 3,
                handleName: "MarkZucc"
            }
            replies: [
                {
                    replyBody: "Reply lorem ipsum",
                    author: {
                        user_id: 4,
                        handleName: "JohnDoe"
                    }
                }
            ]
        }
    ]
}

И предположим, что друг и заблокированные идентификаторы находятся в массиве

blocked_ids = [4, 5]

friend_ids = [2, 3]

Я бы хотел отфильтровать комментарии, чтобы он не возвращал комментарии заблокированных пользователей.

Мой текущий код выглядит следующим образом

query = [
    {"$match": {"author.userId": {"$in": friend_ids}}},
    {"$project": {
        "postBody": 1,
        "comments": {
            "$filter": {
                "input": "$comments",
                "as": "comments",
                "cond": {"$nin": ["$$comments.author.user_id", blocked_ids]}
            }
        }
    }
]

Каким-то образом этот запрос возвращает сообщения из моего друзья, но поле для комментариев пустое. Мне также нужно отфильтровать внутренний массив replies. Мне нужно отфильтровать ответы пользователей, которых я заблокировал.

...