2017-02-01 1 views
2

Ich brauche eine Auswahl von MongoDB Dokumente auszuführen $in Verwendung als https://docs.mongodb.com/manual/reference/operator/query/in/

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } dokumentiert

Ich habe mit dieser versucht, aber

conditions := { 'conditionIds' -> {'$in' -> [ 'uQqazzdwSYsEmqGNp' ] } asDictionary } asDictionary. collection := database collectionAt: 'users'. collection query: [ :q | q where: conditions ].

ich sah, dass MQInCondition existiert, die sehr vielversprechend, aber ich habe kein Beispiel in den Tests oder Projektdokumenten gefunden. Wer weiß, wie man es benutzt? Vielen Dank!

Antwort

2

Sie haben [] als Array-Initialisierer verwechselt, während es im Smalltalk für Blöcke ist. Verwenden Sie stattdessen {}.

collection query: { 'key' -> { 
    '$in' -> { val1 . val2 } } asDictionary } asDictionary 

Bei Verwendung der Abfrage: einem Block Version dann verwenden Sie smalltalk Ausdrücke in Block. Aber die Menge der Ausdrücke, die Sie verwenden können, ist ziemlich begrenzt und zu diesem Datum nicht unterstützt $ in

+0

Danke Norbert. Aber wir haben 'MQInCondition', was würde es brauchen, damit es funktioniert? –

+0

Für den Rekord: Ich brauchte die Werte der Abfrage parametrisiert werden (es ist ein Array, das als Argument kommt), so dass ich nicht wirklich '{Val1. val2} asDictionary' –

+0

Also setze das Array statt {val1. val2}. –

1

Ich habe einen Syntaxfehler auf dem Array des Arguments in meinem vorherigen Versuch gefunden und die Idee war im Allgemeinen richtig. Dies ist die eine, die funktioniert:

conditions := { 'conditionIds' -> {'$in' -> #('uQqazzdwSYsEmqGNp') } asDictionary } asDictionary. collection := database collectionAt: 'users'. collection query: [ :q | q where: conditions ].

4

Sie entweder die 1 verwenden können: 1 abgebildet JavaScript-Syntax (z Übertragung Verzeichnisse) oder verwenden MQuerry auf „automatisch“ Abfragen erstellen. Beispiel unten:

mongo := Mongo default open. 
db := mongo databaseNamed: 'playground'. 
col := db getCollection: 'test'. 


col add: {'field' -> 'value1'} asDictionary; 
    add: {'field' -> 'value2'} asDictionary. 

col select: { ('field' -> { '$in' -> #('value1' 'value2') } asDictionary)}. "The javascript way" 
col select: [ :each | (each at: 'field') in: #('value1' 'value2') ] "The Smalltalk way" 
col select: [ :each | (each field) in: #('value1' 'value2') ]. "Even Smalltalkier :-)" 
Verwandte Themen