【发布时间】:2018-05-25 01:30:46
【问题描述】:
我有以下 json 文件
{
"movies": [{
"title" : "Star Wars: Episode I - The Phantom Menace",
"episode_number" : "1",
"main_characters" : ["Qui-Gon Jinn", "Obi-Wan Kenobi"],
"description" : "The evil Trade Federation, led by Nute Gunray is planning to take over the peaceful world of Naboo. ",
"poster" : "star_wars_episode_1_poster.png",
"hero_image" : "star_wars_episode_1_hero.jpg"
},
{
"title" : "Star Wars: Episode II - Attack of the Clones",
"episode_number" : "2",
"main_characters" : ["Obi-Wan Kenobi", "Anakin Skywalker"],
"description" : "Ten years after the 'Phantom Menace' threatened the planet Naboo, Padmé Amidala is now a Senator representing her homeworld.",
"poster" : "star_wars_episode_2_poster.png",
"hero_image" : "star_wars_episode_2_hero.jpg"
}
]
}
集合名称是水果
我正在尝试仅提取 episode_number = 2 的数据。我尝试了以下查询
db.fruits.find({"movies": {$elemMatch:{"episode_number": "2"}}}).pretty();
返回整个文档,而不仅仅是 episode_number 2 的数据。
和
db.fruits.find({"movies.episode_number": "2"}}}).pretty();
它还返回整个文档,包括第 1 集的文档
我正在尝试弄清楚如何查询此文档,以便仅返回 episode_number = 2 的数据。
请帮忙。
【问题讨论】:
-
看起来您的
movies对象应该是 db 中的另一个集合。现在每个fruit文档都有movies数组字段,这是设计使然吗?如果你真的需要这样的数据库设计,那么使用find查询是不可能返回数组元素的,你应该使用聚合管道,但这将是非常昂贵的查询 -
对不起,我应该指定,集合名称是水果