2012-12-26 18 views
108

Załóżmy dokument MongoDB (tabela) jest „użytkownicy”Jak szukać w tablicy obiektu w MongoDB

{ 
    _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 

Chcę odnaleźć osobę, która ma wielokrotnie „Medalem Nation” i musi być przyznana w roku 1975 Mogą istnieć inne osoby, które otrzymają tę nagrodę w różnych latach.

Jak mogę znaleźć tę osobę, używając typu nagrody i roku. Więc mogę uzyskać dokładną osobę.

Odpowiedz

202

Prawo sposobem jest:

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

$elemMatch pozwala dopasować więcej niż jeden składnik w obrębie tego samego elementu tablicy.

Bez $elemMatch Mongo będzie wyglądać dla użytkowników z Medalem Narodowym w jakiś rok, a niektóre nagrody w 1975s, ale nie dla użytkowników z Medalem Narodowym w 1975.

Zobacz MongoDB $elemMatch Documentation aby uzyskać więcej informacji. Zobacz Read Operations Documentation, aby uzyskać więcej informacji o wysyłaniu zapytań do dokumentów za pomocą tablic.

+3

Gdybym mógł upvote to drugi raz - odkąd wylądował na tej odpowiedzi znowu po raz drugi będę haha –

5

Zastosowanie $ elemMatch znaleźć tablicę konkretnego obiektu

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