mongodb에서 객체 배열을 검색하는 방법


207

mongodb 문서 (테이블) '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 년에 수여되어야하는 사람을 찾고 싶습니다. 다른 해에이 상을 가진 다른 사람이있을 수도 있습니다.

보너스 유형 및 연도를 사용하여이 사람을 어떻게 찾을 수 있습니까? 그래서 나는 정확한 사람을 얻을 수 있습니다.

답변:


367

올바른 방법은 다음과 같습니다.

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

$elemMatch 동일한 배열 요소 내에서 둘 이상의 구성 요소를 일치시킬 수 있습니다.

없이 $elemMatch 몽고 몇 년 국립 메달을 가진 사용자와 1975s에서 어떤 상을 볼 수 있지만 1975 년 국립 메달 사용자를위한 것입니다.

자세한 내용은 MongoDB $ elemMatch 설명서 를 참조하십시오. 참조 읽기 작업 문서를 배열로 문서를 쿼리에 대한 자세한 내용은.


4
즉, elemMatch는 'and'연도의 어워드와 일치합니다 ( 'or'연도와 반대)
Aditya Mittal

이름이 John 인 문서와 국가 메달로 간단한 문서 만 어떻게 쿼리합니까? 우리는 어워드 배열을 통해 집계 및 반복을 수행하지만 간단한 쿼리를 알고 싶었습니다.
Venkatesh Kolla-user2742897

23

$ elemMatch 를 사용 하여 특정 객체의 배열을 찾습니다

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

0

두 가지 방법으로이를 수행 할 수 있습니다.

  1. ElementMatch- $elemMatch(위의 답변에서 설명한 바와 같이)

    db.users.find ({awards : {$ elemMatch : {수상 : 'Turing Award', year : 1977}}})

  2. $and함께 사용find

    db.getCollection ( 'users'). find ({ "$ and": [{ "awards.award": "Turing Award"}, { "awards.year": 1977}]})

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.