2016-08-29 4 views
2

Ich verstehe nicht, warum eine dieser Syntax funktioniert und die andere nicht. Ich verstehe, dass sie beide ziemlich dasselbe meinen.Mongo Abfrage Syntaxfehler

Dies funktioniert

{ 'profile.fname' : { $regex: ".*" + this.queryParams.value + ".*", $options: '-i'}}, 

Diese nicht

{ profile : { fname : { $regex: ".*" + this.queryParams.value + ".*", $options: '-i'}}}, 

Beispiel Datenstruktur sieht aus wie funktioniert:

{ 
"_id":"ybhng3YCu4W4MSzz9", 
"createdAt":"2016-08-23T10:44:33.088Z", 
"emails":[{"address":"[email protected]","verified":false}], 
"profile": 
{ 
"fname":"name", 
"lname":"otherName" 
}, 
"roles":["admin"] 
} 

Die erste das richtige Ergebnis erzeugt aber der zweite produziert nichts - wie in einem leeren Array. Aus dem Debuggen weiß ich, dass das irgendwo die falsche Syntax sein muss, aber ich kann es nicht sehen.

Ich benutze Meteor als Server-Seite.

+0

Strukturell sieht es aus wie fname in der zweite ist in einer Unterstruktur des Profils, während in der ersten, es ist ein Mitglied des Profils ist. – sln

+0

@sln Aktualisiert mit Beispieldatensatz – Allreadyhome

Antwort

0

Wenn Sie ein eingebettetes Dokument abfragen, müssen Sie die Punktnotation verwenden, wie Sie es bei Ihrer ersten Abfrage getan haben.

Wenn Sie ein Dokument angeben, muss es genau übereinstimmen. In diesem Fall würden Sie buchstäblich brauchen:

{ profile: { fname: "name", lname :"otherName"} } 

Natürlich sieht das wie ein schlechter Entwurf für mich aus; Warum ist Profil ein eingebettetes Dokument an erster Stelle? Statt etwas wie folgt aus:

{ 
"_id":"ybhng3YCu4W4MSzz9", 
"createdAt":"2016-08-23T10:44:33.088Z", 
"emails":[{"address":"[email protected]","verified":false}], 

"fname":"name", 
"lname":"otherName" 

"roles":["admin"] 
} 

Referenz:Query on Embedded Documents

+0

Danke. Profil ist eine Erweiterung des Core-Meteokonten-Schemas. – Allreadyhome