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}}})
답변
두 가지 방법으로이를 수행 할 수 있습니다.
-
ElementMatch-
$elemMatch
(위의 답변에서 설명한 바와 같이)db.users.find ({awards : {$ elemMatch : {수상 : ‘Turing Award’, year : 1977}}})
-
$and
함께 사용find
db.getCollection ( ‘users’). find ({ “$ and”: [{ “awards.award”: “Turing Award”}, { “awards.year”: 1977}]})