$ limit количество документов в $ lookup - PullRequest
0 голосов
/ 27 октября 2018

Я столкнулся с проблемой этого запроса, который возвращает этот результат:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            [        
                    {
                            "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                            "search" : "flarize",
                            "name" : "flarize",
                            "email" : "flarize.b73@gmail.com",
                            "password" : "$2a$10$eYeOtEkEUyD7TFkjKvhZOuSSpvBolkL17TrPHuoHhOT8JrsQR0UKW",
                            "color" : 0,
                            "profil" : "",
                            "banner" : "",
                            "desc" : "",
                            "date" : 1540501286109,
                            "friend" : [
                                    {
                                            "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                                            "date" : 1540572026419
                                    },
                                    {
                                            "id" : ObjectId("5bd19a92da24674fdabd26b6"),
                                            "date" : 1540572026419
                                    }
                            ],
                            "groupes" : [ ]
                    }
            ]
    ]
}

Но это не совсем то, что я хочу, я хотел бы, чтобы эти поля были скрыты: friend.password, friend.email ирезультат для friends.groups и friend.friend ограничен до 10. Я не знаю, как я могу решить эту проблему.Мой запрос:

db.users.aggregate(
    {$match:
        {search:"flarize"}
    },
    {$lookup:
        {from:"users", 
         localField:"friend.id", 
         foreignField:"_id", 
         as:"friend"
    }},
    {$project:
        { search: 1, 
         name: 1, 
         profil: 1, 
         banner: 1, 
         color: 1, 
         date: 1, 
         desc: 1, 
         friend: [{$slice:["$friend", 0, 10]}]
    }
}).pretty();

Один документ пользователей:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "email" : "theo.ba73@gmail.com",
    "password" : "$2a$10$eYeOtEkEUyD7TFkjKvhZOuSSpvBolkL17TrPHuoHhOT8JrsQR0UKW",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            {
                    "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                    "date" : 1540572026419
            },
            {
                    "id" : ObjectId("5bd19a92da24674fdabd26b6"),
                    "date" : 1540572026419
            }
    ],
    "groupes" : [ ]
 }

Спасибо за помощь.

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете попробовать ниже агрегации

db.users.aggregate([
  { $match: { search: "flarize" } },
  { $lookup: {
    from: "users", 
    let: { friendId: "$friend.id" }, 
    pipeline: [
      { $match: { $expr: { $in: ["$_id", "$$friendId"] }}},
      { $limit: 10 },
      { $project: { email: 0, password: 0 }}
    ], 
    as: "friend"
  }}
])
...