2016-06-02 7 views
1

Sagen wir, ich 3 Artikel in einer Sammlung haben:In Mongo, wie würde ich alle Elemente der Sammlung mit einem größeren Array übereinstimmen?

[ 
    { 
     id: 'a', 
     items: [1, 2, 3] 
    }, { 
     id: 'b', 
     items: [4, 5, 6] 
    }, { 
     id: 'c', 
     items: [7, 8, 9] 
    } 
] 

Auf der Code auf dieser Seite JavaScript, um alles, was ich habe, ist ein Array [5, 2, 6, 4, 7, 8]. Wie würde ich meine Abfrage erstellen, um nur das zweite Objekt aus der Sammlung auszuwählen, da mein Array alle Elemente (4, 5 und 6) seines items Arrays enthält?

+0

Ist pure Javascript-Lösung in diesem Fall akzeptabel? –

+0

Ich suche nach einer Mongo-Abfrage, weil das Set, das ich gab, winzig ist und db Millionen von Dokumenten hat. –

+0

Mögliches Duplikat von [Dokumente auswählen, bei denen alle Werte in einem Array-Feld in einem größeren Array vorhanden sind] (http://stackoverflow.com/questions/37376408/select-documents-where-all-values-in-an-array-field -exist-in-a-large-array) – styvane

Antwort

2

Mit mongoDB Aggregation Set Operator können Sie Ihr Array filtern. Ermitteln Sie zuerst den Schnittpunkt des angegebenen Arrays mit dem tatsächlichen Datenbank-Array und danach die set-equals-Methode. Überprüfen Sie unter Abfrage:

db.collectionName.aggregate({ 
    "$project": { 
    "checkAllElem": { 
     "$setEquals": [{ 
      "$setIntersection": ["$items", [5, 2, 6, 4, 7, 8]] 
     }, "$items"] 
    }, 
    "items": 1 
    } 
}, { 
    "$match": { 
    "checkAllElem": true 
    } 
}) 
+0

Vielen Dank @Yogesh! Dies ist perfekt :) –

Verwandte Themen