2017-01-29 3 views
0

Рассмотрим это:Извлечение значения из массива объектов JSON в MongoDB

{ 
    "movies": [ 
    { 
     "title": "Star Wars", 
     "year": 1977, 
     "director": "George Lucas" 
    }, 
    { 
     "title": "The Empire Strikes Back", 
     "year": 1980, 
     "director": "Irvin Kershner" 
    }, 
    { 
     "title": "Return of the Jedi", 
     "year": 1983, 
     "director": "Richard Marquand" 
    }, 
    { 
     "title": "The Phantom Menace", 
     "year": 1999, 
     "director": "George Lucas" 
    }, 
    { 
     "title": "Attack of the Clones", 
     "year": 2002, 
     "director": "George Lucas" 
    }, 
    { 
     "title": "Revenge of the Sith", 
     "year": 2005, 
     "director": "George Lucas" 
    }, 
    { 
     "title": "The Force Awakens", 
     "year": 2015, 
     "director": "J.J. Abrams" 
    } 
    ] 
} 

Я пытаюсь вытащить все фильмы режиссера Geroge Лукаса. Это то, что я пытался и возвращает все элементы:

db.movies.find({"movies.director" : "George Lucas"}).pretty() 

, а также это, что приводит к ошибке:

db.movies.find({"$pull" : {"movies.director" : "George Lucas"}}).pretty() 

Пожалуйста, дайте мне знать, как обращаться к базе данных для извлечения только фильмов, где Ключ директора имеет «Джордж Лукас» как ценность.

+0

Используйте [$ фильтр] (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/) – Veeram

+0

Как вы можете это сделать ? – JohnSnow

+0

Вам нужно использовать функцию суммирования $ unwind – akinjide

ответ

3

Вы должны использовать структуру агрегации:

db.movies.aggregate([ 
{ 
    $unwind : "$movies" 
}, 
{ 
    $match : { 
     "movies.director" : "George Lucas" 
    } 
}, 
{ 
    $project : { 
     _id : 0, 
     movies : 1 
    } 
} 
]) 
+0

Выдает ошибку, когда я запускаю ее. – JohnSnow

+0

@JohnNoob: Я пропустил стадию '' '' '' '. Отредактировал ответ. Сейчас должно быть хорошо. – ares

+0

Yep работает сейчас. Просто нужно читать, что, черт возьми, вы сделали сейчас – JohnSnow

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