Как получить только запрошенный объект массива из массива в mon go db с регулярным выражением? - PullRequest
0 голосов
/ 13 июля 2020

Мои данные сохранены в mon go db вот так

  {
 "_id": "5eff4376e036e45de9dbc6df",
 "social_connections":{
     "friend":{
         "friends":[
            {
                "_id": "5eff42dee036e45de9dbc6d3",
                "user_name": "x",
                "name": "Viper King"
            },
            {
                "_id": "5eff40efe036e45de9dbc6c9",
                "user_name": "z",
                "name": "Brad Prasad Pitt"
            },
            {
                "_id": "5eff50337508da5ff40bf36e",
                "user_name": "test",
                "name": "Test"
            }

         ]
         
     },
     "followers":{
        "following":[
            {
                "_id": "5eff42dee036e45de9dbc6d3",
                "user_name": "x",
                "name": "Viper King"
            },
            {
                "_id": "5eff40efe036e45de9dbc6c9",
                "user_name": "z",
                "name": "Brad Prasad Pitt"
            },
            {
                "_id": "5eff50337508da5ff40bf36e",
                "user_name": "test",
                "name": "Test"
            }
        ]
     }
 }
 }

Я хочу сделать запрос mon go db, в котором я передал бы _id документа, который равен 5eff4376e036e45de9dbc6df и регулярное выражение «Vi», теперь Мне нужны все те объекты массива, имя которых содержит «Vi» . Мой ожидаемый результат: -

  {
 "_id": "5eff4376e036e45de9dbc6df",
 "social_connections":{
     "friend":{
         "friends":[
            {
                "_id": "5eff42dee036e45de9dbc6d3",
                "user_name": "x",
                "name": "Viper King"
            }

         ]
         
     },
     "followers":{
        "following":[
            {
                "_id": "5eff42dee036e45de9dbc6d3",
                "user_name": "x",
                "name": "Viper King"
            }
        ]
     }
 }
 }

Вы также можете сделать запрос, который возвращает только _id тех, чье имя содержит 'Vi'

1 Ответ

1 голос
/ 13 июля 2020

Вы можете использовать $ filter , чтобы получить новый фильтрованный массив и $ regexMatch , чтобы применить ваше регулярное выражение:

db.collection.aggregate([
    {
        $project: {
            "social_connections.friend.friends": {
                $filter: {
                    input: "$social_connections.friend.friends",
                    as: "friend",
                    cond: {
                        $regexMatch: { input: "$$friend.name", regex: "Vi" }
                    }
                }
            },
            "social_connections.followers.following": {
                $filter: {
                    input: "$social_connections.followers.following",
                    as: "follower",
                    cond: {
                        $regexMatch: { input: "$$follower.name", regex: "Vi" }
                    }
                }
            }
        }
    }
])

Mon go Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...