Suchen Sie in MongoDB nach Dokumenten mit Arrays, die kein Dokument mit einem bestimmten Feldwert enthalten

Ich versuche, alle Dokumente zu finden, die nicht mindestens ein Dokument mit einem bestimmten Feldwert enthalten. Zum Beispiel ist hier eine Beispielsammlung:

{  _id : 1,
  docs : [
        { foo : 1,
          bar : 2},
        { foo : 3,
          bar : 3}
         ]
},
{  _id : 2,
  docs : [
        { foo : 2,
          bar : 2},
        { foo : 3,
          bar : 3}
         ]
}

Ich möchte jeden Datensatz finden, in dem sich kein Dokument im docs-Block befindet, das nicht mindestens einen Datensatz mit foo = 1 enthält. Im obigen Beispiel sollte nur das zweite Dokument zurückgegeben werden.

Ich habe Folgendes ausprobiert, aber es wird nur angezeigt, ob es welche gibt, die nicht übereinstimmen (was Dokument 1 zurückgibt.

db.collection.find({"docs": { $not: {$elemMatch: {foo: 1 } } } })

AKTUALISIEREN: Die obige Abfrage funktioniert tatsächlich. Wie so oft stimmten meine Daten nicht mit meinem Code überein.

Ich habe mir auch das angeschaut$ nin Operator Die Beispiele zeigen jedoch nur, wenn das Array eine Liste primitiver Werte enthält, kein zusätzliches Dokument. Wenn ich versucht habe, dies mit etwas wie dem Folgenden zu tun, sucht es nach dem EXAKTEN Dokument und nicht nur nach dem gewünschten foo-Feld.

db.collection.find({"docs": { $nin: {'foo':1 } } })

Gibt es überhaupt eine Möglichkeit, dies mit den Basisoperatoren zu erreichen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage