Findet Dokumente mit dem array, die nicht einen bestimmten Wert enthält
Ich habe Folgendes Modell:
var PersonSchema = new Schema({
name: String,
groups: [
{type: Schema.Types.ObjectId, ref: 'Group'}
],
});
Ich bin auf der Suche nach einer Abfrage, die alle Personen, die nicht Teil einer bestimmten Gruppe (ich.e die Personen-Gruppe-array nicht enthalten, die id der angegebenen Gruppe).
Ich dachte an so etwas wie dieses, aber ich bin nicht sicher, es ist richtig:
Person.find({groups: {$nin: [group._id]})
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nichts falsch mit dem, was Sie sind im Grunde versucht, aber vielleicht die einzige Erklärung ist die gemeinsame Missverständnis, dass müssen Sie Operatoren wie
$po
oder$in
bei der Abfrage ein array.Auch Sie wirklich brauchen, um hier tun, ist eine grundlegende Ungleichheit match mit
$ne
:Des "array" - Betreiber sind nicht für "array-Ziele", sondern für die Schaffung einer "Liste" von Bedingungen zu testen, in einer bequemen form.
So verwenden Sie einfach normale Operatoren für einzelne Bedingungen, und speichern Sie
$in
und$nin
für, wo Sie wollen, um zu testen, mehr als eine Bedingung gegen entweder ein einzelner Wert oder eine Liste. So ist es gerade anders herum.Wenn Sie brauchen, um passieren eine "Liste" von Argumenten, wo "keiner" von denen in der Liste überein, den Inhalt des array, dann kehren Sie die Logik mit dem
$nicht
Betreiber und die$all
Betreiber:So, dass bedeutet, dass "keiner auf der Liste", sofern vorhanden sind im array.
[group._id]
. Wenn Sie beabsichtigen, übergeben Sie eine "Liste" und stellen Sie sicher, dass keines dieser Elemente in der Liste vorhanden sind, dann gibt es einen anderen Weg Sie zu vertreten.