是否可以从MongoDB中提取多个子数组?

时间:2013-01-14 01:38:37

标签: mongodb

采取以下措施。我可以通过执行以下操作为_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
             }
         ]
    }
)

1 个答案:

答案 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
    }
  ]
}