采取以下措施。我可以通过执行以下操作为_id = 1
拉出匹配“1967”的记录。是否可以打印与1967年匹配的奖项和与“Penn?”相匹配的学校名称
db.bios.find({_id:1, "awards.year" : 1967},{"awards.$":1}).pretty()
db.bios.insert(
{
_id: 1,
awards: [
{
award: 'W.W. McDowell Award',
year: 1967,
by: 'IEEE Computer Society'
},
{
award: 'National Medal of Science',
year: 1975,
by: 'National Science Foundation'
},
],
"schools" : [
{
name : "Harvard",
year : 1945
},
{
name : "Penn",
year : 1950
}
]
}
)
答案 0 :(得分:3)
从v2.2.2起,每个查询只能使用一个$
位置运算符,但您可以多次使用$elemMatch
投影运算符来执行此操作:
db.bios.find({_id:1}, {
awards: {$elemMatch: {year: 1967}},
schools: {$elemMatch: {name: "Penn"}}
}).pretty()
输出:
{
"_id": 1,
"awards": [
{
"award": "W.W. McDowell Award",
"year": 1967,
"by": "IEEE Computer Society"
}
],
"schools": [
{
"name": "Penn",
"year": 1950
}
]
}