MongoDB: mehrere $ elemMatch

Ich habe MongoDB-Dokumente wie folgt aufgebaut:

{_id: ObjectId("53d760721423030c7e14266f"),
fruit: 'apple',
vitamins: [
    {
     _id: 1,
     name: 'B7',
     usefulness: 'useful',
     state: 'free',
    }
    {
     _id: 2,
     name: 'A1',
     usefulness: 'useful',
     state: 'free',
    }
    {
     _id: 3,
     name: 'A1',
     usefulness: 'useful',
     state: 'non_free',
    }
  ]
}
{_id: ObjectId("53d760721423030c7e142670"),
fruit: 'grape',
vitamins: [
    {
     _id: 4,
     name: 'B6',
     usefulness: 'useful',
     state: 'free',
    }
    {
     _id: 5,
     name: 'A1',
     usefulness: 'useful',
     state: 'non_free',
    }
    {
     _id: 6,
     name: 'Q5',
     usefulness: 'non_useful',
     state: 'non_free',
    }
  ]
}

Ich möchte alle Früchte abfragen und erhalten, die beide haben{name: 'A1', state: 'non_free'} und{name: 'B7', state: 'free'}. Im schlimmsten Fall möchte ich zumindest diese Einträge zählen, wenn es nicht möglich ist, sie zu erhalten, und wenn der entsprechende Code für Pymongo existiert, um zu wissen, wie man ihn schreibt.

Für das gegebene Beispiel möchte ich nur das Apfel (erste) Dokument abrufen.

Wenn ich benutze$elemMatch Es funktioniert nur für eine Bedingung, aber nicht für beide. Z.B. wenn ich fragefind({'vitamins': {'$elemMatch': {'name': 'A1', 'state': 'non_free'}, '$elemMatch': {'name': 'B7', 'state': 'free'}}}) es wird alle Früchte mit abrufen{'name': 'B7', 'state': 'free'}.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage