MongoDB: Vergleiche ein nicht leeres Dokument in einem Array
Habe ich eine Sammlung von strukturierten folgendermassen:
{
_id: 1,
score: [
{
foo: 'a',
bar: 0,
user: {user1: 0, user2: 7}
}
]
}
Brauche ich, um alle Dokumente zu suchen, die mindestens einen "score-Wert" (element in der Partitur array), die einen bestimmten Wert hat der 'bar' und ein nicht-leeren 'user' sub-Dokument.
Dies ist, was ich kam mit (und es schien, wie es funktionieren sollte):
db.col.find({score: {"$elemMatch": {bar:0, user: {"$not":{}} }}})
Aber, ich bekomme diese Fehlermeldung:
error: { "$err" : "$not cannot be empty", "code" : 13030 }
Anderen Weg, dies zu tun?
Kommentar zu dem Problem
Ist, dass genau wie ist Sie aufgebaut? Scheint ein bisschen ab. > var doc = { score: [ foo: 'a', Takt: 0, Benutzer: { user1: 0, "Benutzer2": 7 } ] }; do Jul 7 00:43:42 SyntaxError: missing ] after element list (shell):1
@Justin: du hast Recht, habe vergessen die geschweiften Klammern innerhalb des array.
InformationsquelleAutor der Frage Dmitri | 2011-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Herausgefunden:
{ 'score.user': { "$gt": {} } }
passen nicht leer docs.InformationsquelleAutor der Antwort Dmitri
Ich bin mir nicht sicher, versteh ich dein schema, aber vielleicht die naheliegendsten Weg wäre, um nicht einen "leeren" Wert für Partitur.Benutzer ?
Statt absichtlich nicht haben, das Feld in Ihrem Dokument, wenn es keinen Inhalt hat?
Dann Ihre Abfrage könnte so etwas wie ...
also auf der Suche nach einem Wert in Partitur.bar, die Sie möchten (in diesem Fall 0) überprüfung der für die mear Existenz ($vorhanden ist, siehe docs) Partitur.Benutzer (und wenn es einen Wert hat, dann ist es vorhanden???)
herausgegeben: oops, ich verpasste die $elemMatch Sie hatte ...
InformationsquelleAutor der Antwort Justin Jenkins
Werden Sie wahrscheinlich wollen, um hinzuzufügen ein Hilfs-array, das Spur hält der Benutzer in der
user
Dokument:Dann können Sie neue Benutzer atomar:
Benutzer entfernen:
Abfrage erzielt:
Wenn Sie wissen, Sie werden nur das hinzufügen von nicht-vorhandene Benutzer und entfernen vorhandene Benutzer aus der
user
Dokument können Sie vereinfachenusers
zu einem Zähler statt einem array, aber die oben ist widerstandsfähiger.InformationsquelleAutor der Antwort cwb
Blick auf die $size Betreiber für die überprüfung der array-Größen.
InformationsquelleAutor der Antwort Andreas Jung