1

次のように取ります。次のようにすることで、 「1967」に一致するレコードをプルでき_id = 1ます。1967年に一致する賞と「ペン」に一致する学校名を印刷することは可能ですか?

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
             }
         ]
    }
)
4

1 に答える 1

3

v2.2.2以降$、クエリごとに使用できる位置演算子は1つだけですが、これを行うには、$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
    }
  ]
}
于 2013-01-14T02:26:14.327 に答える