web-dev-qa-db-ja.com

mongodbのオブジェクトの配列を検索する方法

Mongodb document(table) 'users'が

{
  _id: 1,
  name: { first: 'John', last: 'Backus' },
  birth: new Date('Dec 03, 1924'),
  death: new Date('Mar 17, 2007'),
  contribs: [ 'Fortran', 'ALGOL', 'Backus-Naur Form', 'FP' ],
  awards: [
            { award: 'National Medal',
              year: 1975,
              by: 'NSF' },
            { award: 'Turing Award',
              year: 1977,
              by: 'ACM' }
          ]
}
and other object(person)s

「国家勲章」を授与され、1975年に授与されなければならない人を見つけたい.

賞の種類と年を使用してこの人を見つけるにはどうすればよいですか。だから私は正確な人を得ることができます。

174
vcxz

正しい方法は次のとおりです。

db.users.find({awards: {$elemMatch: {award:'National Medal', year:1975}}})

$elemMatchを使用すると、同じ配列要素内の複数のコンポーネントを照合できます。

$elemMatchがなければ、mongoは、1年以内にNational Medalのユーザーを探し、1975年代にいくつかの賞を探しますが、1975年のNational Medalのユーザーは探しません。

詳細については、 MongoDB $ elemMatch Documentation を参照してください。配列を使用したドキュメントのクエリの詳細については、「 操作ドキュメントを読む 」を参照してください。

306

$ elemMatchを使用して、特定のオブジェクトの配列を検索します

db.users.findOne({"_id": id},{awards: {$elemMatch: {award:'Turing Award', year:1977}}})
17
KARTHIKEYAN.A