Несколько $ lookup в одном запросе MongoDB - PullRequest
0 голосов
/ 28 октября 2018

Я сейчас создаю запрос, но не могу.

Итак, есть один документ 1 пользователя:

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

И мой запрос:

db.users.aggregate([{
    $match:{
        search: "flarize"
    }},{
    $lookup:{
        from: "users",
        let:{friendId:"$friend.id"},
        pipeline:[{
            $match:{
                $expr:{
                    $in:["$_id","$$friendId"]
                }
            }},{
            $limit:10},{
            $skip:0},{
            $project: {
                name: 1,
                search:1,
                desc:1, 
                friend:1, 
                date:1, 
                banner:1, 
                profil:1,
                color: 1
            }
       }],
       as:"friends"}},{
  $project:{
      profil:1, 
      search:1, 
      name:1, 
      profile:1, 
      banner:1, 
      color:1, 
      date:1, 
      desc:1, 
      friend:1, 
      friends:1
  }
}]).pretty();

Я получил такой результат:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            {
                    "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                    "date" : 1540713424488
            }
    ],
    "friends" : [
            {
                    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                    "search" : "flarize",
                    "name" : "flarize",
                    "color" : 0,
                    "profil" : "",
                    "banner" : "",
                    "desc" : "",
                    "date" : 1540501286109,
                    "friend" : [
                            {
                                    "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                                    "date" : 1540713424488
                            }
                    ]
            }
    ]
}

Это не совсем то, что я хочу. Я хотел бы сравнить документ выбранного лица и того, кто запрашивает запрос, если идентификатор выбранного лицаприсутствует в другом, тогда is_friend будет равно true, иначе оно будет равно false.

Я пытаюсь это подумать:

db.users.aggregate([{
    $match:{
        search: "flarize"
    }},{
    $lookup:{
        from: "users",
        let:{friendId:"$friend.id"},
        pipeline:[{
            $match:{
                $expr:{
                    $in:["$_id","$$friendId"]
                }
            }},{
            $limit:10},{
            $skip:0},{
            $project: {
                name: 1,
                search:1,
                desc:1, 
                friend:1, 
                date:1, 
                banner:1, 
                profil:1,
                color: 1
                is_friend:{
                    $lookup:{
                        from:"users", 
                        let:{friendIdIs:"$_id"}, 
                        pipeline:[{
                            $match:{
                                 $expr:{
                                     $and:[{
                                          $in:["$$friendIdIs", "$friend.is"]},{
                                          $eq:["_id", ObjectId("5bd22f28f77cfb1f6ce503ca")]
                                      }]
                                 }
                            }
                     }], 
                     as:"yes"}}
                }
            }
       }],
       as:"friends"}},{
  $project:{
      profil:1, 
      search:1, 
      name:1, 
      profile:1, 
      banner:1, 
      color:1, 
      date:1, 
      desc:1, 
      friend:1, 
      friends:1
  }
}]).pretty();

Но это не работает.

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

...