Как получить имена всех пользователей с идентификаторами объектов в пн go дБ - PullRequest
0 голосов
/ 04 февраля 2020

Вот моя структура данных,

{
        "_id" : ObjectId("5e38e95a5c50fe7afb44866b"),
        "username" : "user9",
        "name" : "user9",
        "email" : "user9@testing.com",
        "password" : "testing11",
        "dateOfBirth" : ISODate("1992-12-29T13:00:00Z"),
        "gender" : "Male",
        "location" : "Melbourne",
        "relationshipStatus" : "Married",
        "visibilityStatus" : 3,
        "friends" : [
                ObjectId("5e38e9175c50fe7afb448667"),
                ObjectId("5e38e92a5c50fe7afb448668"),
                ObjectId("5e38e9405c50fe7afb448669"),
                ObjectId("5e38e94c5c50fe7afb44866a")
        ],
        "friendRequests" : [ ]
}

Таким образом, в основном в массиве друзей я пу sh в идентификатор объекта, но мне нужно знать, как агрегировать, чтобы я мог получить список имен, используя их идентификатор объекта, поэтому запрос, который даст результат - ['user5', 'user6', 'user7', 'user8'] или что-то подобное, которые являются друзьями этого пользователя

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вы можете попробовать это: -

db.user.aggregate([
    {$unwind:"$friends"},
    {$lookup: { 
        from: "user",
        localField: "friends",
        foreignField: "id",
        as: "friendInfo" 
      }
    },
    {$group:{
       _id:"$_id",
       friends:{$addToSet:{$arrayElemAt:["$friendInfo.name",0]}},
       name:{$first:"$name"}
      }
    }
]);
0 голосов
/ 04 февраля 2020
db.Users.aggregate([
    {$match: {_id: loggedInUser._id}},
    {
        $lookup: {
            from: 'Users',
            localField: 'friends',
            foreignField: '_id',
            as: 'showFriends'
        }
    },
    {$group:{
            _id:"$_id",
            friends:{$push:'$showFriends.username'},
        }
    }
]);

Я понял это благодаря ответу мистера Ганди. Мне нужно было использовать группу.

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