Trouver objet basé sur l'élément de tableau, de retour seulement correspondant à l'élément de tableau?

J'ai une Personne de l'objet dans la mangouste, et que personne objet a plusieurs choses (chaque chose a un ID unique).

person1 = {
  things[{id: 1, name: 'one'},{id:2, name: 'two'}]
}
person2 = {
  things[{id: 3, name: 'three'},{id:4, name: 'four'}]
}

ensuite requête:

Person.findOne({'things.id': 2},{'things.$': 1}, function(err, person) { ...

Cela fonctionne très bien mais je suis à la recherche à travers tous les objets de la Personne (ce qui pourrait être beaucoup de). Dans ce cas, je sais que l'id de la Personne dont j'ai besoin et certaines identifiant unique d'une "chose". Il y a probablement beaucoup plus rapide à obtenir de la Personne par id:

Person.findById(personId, function(err, person) { ...

Alors en boucle sur toutes les choses pour trouver la bonne:

var thing
person.things.forEach(function(t) {
  if (t.id == thingId) {
    thing = t;
  }
});

Ce que je me demande c'est si il ya une meilleure façon. I. E. j'ai une requête à la Personne de collecte par l'id d'une Personne puis filtrer un peu la chose, je suis à la recherche d' (sans laide de la boucle)?

  • Ce n' things.$ veux dire? Ce qui ne l' $ reportez-vous à/faire?
  • Le $ est un opérateur de position. Vous pouvez trouver plus de détails à ce sujet dans le Mongo docs 😉