агрегирование нескольких полей из документов в отдельные коллекции с использованием MongoDB - PullRequest
0 голосов
/ 19 сентября 2018

Я использовал приведенный ниже код, чтобы отобразить результат двух полей отдельных коллекций: InfoMovie и Rate, имея в качестве общего поля MID.Я хочу, чтобы набор результатов отображал «Актеры» из коллекции «InfoMovie» и «Замечание» из коллекции «Оценить» в один набор результатов с помощью Mongodb.Но когда я выполняю приведенный ниже код, он просто отображает список «замечаний», но не показывает имя отмеченных актеров.[Примечание: все актеры в коллекции не отмечены. Немногие из них являются замечанием.Мы должны показать только имя отмеченного актера.] Я был бы очень благодарен, если бы кто-нибудь мог решить это.Заранее спасибо!:)

db.InfoMovie.aggregate([
 {
    $lookup: 
    { 
        from:"Rate",
        localField:"MID", 
        foreignField:"MID", 
        as:"ActorsRating"
    }
},
    {
        $project:{"Remark":1,"Actors":1}
    }
])

Ниже приведены образцы документов: образец документа коллекции infoMovie:

{
    "MID":"1",
    "MovieName":"Iron man",
    "Actors":"RDJ",
    "RDate":"2008",
    "Country":"USA",
}, 

{
    "MovieID":"2",
    "MovieName":"Dark Knight",
    "Actors":"Christian Bail",
    "RDate":"2007",
    "Country":"USA",
}

Используемая мной версия mongod - 3.4.7.Спасибо!

образец документа инкассо Оценить:

{
    "MID":1,
    "ReviewedBy":"John",
    "Rate":4,
    "Date":"10/04/2013",
    "remark":"The best Movie ever!",
},
{
    "MID":2,
    "ReviewedBy":"William",
    "Rate":8,
    "Date":"19/06/2014",
}     

1 Ответ

0 голосов
/ 19 сентября 2018

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

Вам нужно использовать агрегацию $filter, чтобы отфильтровать документы, где Remark равно неопределенному.

db.InfoMovie.aggregate([
  { "$lookup": { 
    "from":"Rate",
    "localField":"MID", 
    "foreignField":"MID", 
    "as":"ActorsRating"
  }},
  { "$project": {
    "Actors": 1,
    "Remark": {
      "$filter": {
        "input": "$ActorsRating",
        "as": "ac",
        "cond": { "$ne": ["$$ac.remark", undefined] }
      }
    }
  }}
])
...