2016-03-23 10 views
2

Ich versuche, ein bestimmtes Element in einem Array in einer Meteor-Sammlung auf der Clientseite abzufragen, aber Minimongo unterstützt den Operator $ nicht. Gibt es eine Alternative zum Filtern meiner Abfrage, sodass nur das spezifische Element im Array zurückgegeben wird?

Meine Sammlung ist wie folgt strukturiert:

{ 
    "userID": "abc123", 
    "array": [ 
    { 
     "id": "foo", 
     "propA": "x", 
     "propB": "y" 
    }, 
    { 
     "id": "bar", 
     "propA": "a", 
     "propB": "b" 
    } 
    ] 
} 

Ich versuche, eine Abfrage zu schreiben, die nur das Objekt in dem Feld mit der ID „foo“ zurückgibt. In Mongo, würde diese Abfrage sein:

collection.find({ 
    "userID": "abc123", 
    "array.id": "foo" 
}, { 
    "array.$": 1 
}); 

jedoch Minimongo nicht den $ Operator in Projektionen unterstützt so dies auf einen Fehler wirft. Ich habe ähnlich strukturierte Abfragen mit $ elemMatch ausprobiert und versucht, die solution described here, aber es erreicht nicht, was ich versuche zu tun.

Gibt es eine alternative Möglichkeit, mit Minimongo nach dem einen Element in diesem Array zu suchen?

Antwort

3

Sie können findWhere verwenden, um das erste übereinstimmende Objekt in einem Array zu extrahieren. Geben Sie so etwas wie einen Versuch:

// Find all documents matching the selector. 
const docs = Collection.find({ userId: 'x', 'array.id': 'y' }).fetch(); 

// For each document, find the matching array element. 
for (let doc of docs) { 
    let obj = _.findWhere(doc.array, { id: 'y' }); 
    console.log(obj); 
} 
+0

Ich tatsächlich find(). Fetch() und es tat genau das, was ich suchte. Wenn Sie die Antwort bearbeiten, markiere ich sie korrekt. –

+0

@JoshVickerson Sehen Sie sich die vorgeschlagenen Änderungen an. Ich bin immer noch unklar, ob Sie nach einem Element in einem oder mehreren Dokumenten suchen. –

+0

Ich suche nach einem Element in einem einzigen Dokument. In meinem Anwendungsfall ist die userId eindeutig, daher sollte der Fund immer nur einem Dokument entsprechen. Ich brauche dann ein einzelnes Element aus dem Array in diesem Dokument. –

Verwandte Themen