web-dev-qa-db-fra.com

Comment rechercher dans un tableau d'objet dans mongodb

Supposons que le document mongodb (table) 'utilisateurs' soit

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

Je veux trouver la personne qui a reçu le prix 'Nation Medal' et doit être attribué en 1975. Il se peut que d'autres personnes possèdent ce prix plusieurs années à la fois.

Comment puis-je trouver cette personne en utilisant le type de récompense et l'année? Donc je peux avoir la personne exacte.

177
vcxz

La bonne façon est:

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

$elemMatch vous permet de faire correspondre plusieurs composants dans le même élément de tableau.

Sans $elemMatch, mongo recherchera des utilisateurs avec une médaille nationale dans quelques années et des récompenses dans les années 1975, mais pas les utilisateurs avec une médaille nationale en 1975.

Voir Documentation MongoDB $ elemMatch pour plus d'informations. Voir Lisez la documentation sur les opérations pour plus d'informations sur l'interrogation de documents avec des tableaux.

316
Leonid Beschastny

Utilisez $ elemMatch pour trouver le tableau d'un objet particulier

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