2016-05-08 3 views
1

Коллекция A: Список фильмов с "середины", как ID:MongoDB: Поиск данных в коллекции A, которые существуют в коллекции B

> db.moviesCollection.find().pretty() 
{ 
     "_id" : ObjectId("57266290482b0b6d8ad6a8bd"), 
     "mid" : 1, 
     "title" : "Toy Story (1995)", 
     "genres" : "Animation|Children's|Comedy" 
} 
{ 
     "_id" : ObjectId("57266290482b0b6d8ad6a8be"), 
     "mid" : 3, 
     "title" : "Grumpier Old Men (1995)", 
     "genres" : "Comedy|Romance" 
} 

Коллекция B: Перечень номинальных фильмов "середине"

> db.ratingsCollection.find().pretty() 
{ 
     "_id" : ObjectId("57266359482b0b6d8ad6b7e8"), 
     "uid" : 1, 
     "mid" : 1193, 
     "rating" : 5, 
     "timestamp" : 978300760 
} 
{ 
     "_id" : ObjectId("57266359482b0b6d8ad6b7e9"), 
     "uid" : 1, 
     "mid" : 661, 
     "rating" : 3, 
     "timestamp" : 978302109 
} 

Мой вопрос: Как я могу получить все фильмы из фильма (moviesCollection), которые существуют (в середине) в (ratingCollection), названия фильмов с рейтингом? thx заранее.

+0

Просьба уточнить, что вы имеете в виду "существует (середина)"? – thepirat000

ответ

-3
select * from A where exists (select mid from B where B.mid = A.mid) 
+0

это база данных NoSql - см. [Здесь] (https://www.mongodb.com/) – profesor79

+0

Ваш язык Python? – mhyst

+0

этот вопрос был опубликован под тегами mongo, это означает, что ответ должен соответствовать требованиям тега. – profesor79

2

db.r -> рейтинги db.m -> фильмы

Aggregation рамки поставляется с $ поиска, начиная с версии 3.2 - который является основной частью предлагаемого решения.

db.r.aggregate([{ 
      $lookup : { 

       from : "m", 
       localField : "mid", 
       foreignField : "mid", 
       as : "result" 
      } 
     }, { 
      $match : { 
       "result" : { 
        $exists : true, 
        $ne: [] 
       } 
      } 
     } 
    ]) 

Любые кометы приветствуются!

1

Вы можете сделать это:

db.moviesCollection.aggregate([ 
    { 
     $match: { 
      "mid": { 
       $in: db.ratingsCollection.find().map(function(r) { return r.mid; }) 
      } 
     } 
    } 
]) 
+0

будет работать в монго <3.2? – profesor79

+0

@ profesor79 Я думаю, что это будет, но я не думаю, что он будет хорошо работать с большим количеством документов. Ваше решение лучше. –

Смежные вопросы