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

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

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



답변

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

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

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

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

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


답변

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

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


답변

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

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


답변