2017-11-26 11 views
0

nach viel lesen, bin ich fest. der Code, den ich hier gepostet habe, ist die Implementierung einer Geschäftsdatenbank, die ich versuche zu machen. in jedem Geschäft haben wir einige Felder. Ich bin daran interessiert, etwas mit dem Array items zu tun, das JSON-Variablen enthält. Ich möchte die Elemente durch drei Filter filtern, erstens durch die Geschäfts-ID, zweitens durch die Kategorie ID, und der letzte Filter wird die Halbkategorie ID sein.Mungo, wie man spezifischen Wert findet

Ich möchte die Daten von der Front-End senden, was bedeutet, dass ich STOREID, die CategoryID und die SemiCategoryID liefern. nach dem Empfang der Daten auf der Backend-Seite, erwarte ich nur die relevanten Elemente entsprechend den Daten von der Front-End erhalten.

{ 
    "_id": { 
     "$oid": "5a1844b5685cb50a38adf5bb" --> **ID of the STORE** 
    }, 
    "name": "ACE", 
    "user_id": "59e4c41105d1f6227c1771ea", 
    "imageURL": "none", 
    "rating": 5, 
    "items": [ 
     { 
      "name": "NirCohen", 
      "categoryID": "5a0c2d292235680012bd12c9", 
      "semiCatID": "5a0c2d5a2235680012bd12ca", 
      "_id": { 
       "$oid": "5a1958181cd8a208882a80f9" 
      } 
     }, 
     { 
      "name": "he", 
      "categoryID": "5a0c2d292235680012bd12c9", 
      "semiCatID": "5a0c2d5a2235680012bd12ca", 
      "_id": { 
       "$oid": "5a1973c40e561e08b8aaf2b2" 
      } 
     }, 
     { 
      "name": "a", 
      "categoryID": "5a0c2d292235680012bd12c9", 
      "semiCatID": "5a0c2d5a2235680012bd12ca", 
      "_id": { 
       "$oid": "5a197439bc1310314c4c583b" 
      } 
     }, 
     { 
      "name": "aaa", 
      "categoryID": "5a0c2d292235680012bd12c9", 
      "semiCatID": "5a0c2d5a2235680012bd12ca", 
      "_id": { 
       "$oid": "5a197474558a921bb043317b" 
      } 
     }, 
    ], 
    "__v": 9 
} 

und ich möchte das Backend die gefilterten Elemente nach der Abfrage zurückgeben.

Das Problem ist, ich bekomme nicht die richtige Abfrage.

Ihre Hilfe wird sehr geschätzt,

danken Ihnen im Voraus.

+0

Könnten Sie versuchen, besser erklären können, was Sie wollen passieren ? Wo wird mongo aufgerufen? Was ist Ihr Ergebnis und was ist Ihr beabsichtigtes Ergebnis? – OArnarsson

+0

Derzeit gibt es eine grundlegende Abfrage mongoose, die nur den Speicher pop, ich möchte alle 'Elemente' (Namen), die die categoryID und subcategoryID entsprechen. Ich möchte ein JSON-Liste \ Array mit allen Elementen (Name Feld), die mit der Speicher-ID übereinstimmen (die ich bereits erfolgreich) und mit den anderen Parametern (KategorieID, SemiCatyegoryID) –

+0

So holen Sie nur ein Objekt Holen Sie die StoreID, aber Sie möchten das Store-Objekt füllen? check this out http://mongoosejs.com/docs/populate.html – OArnarsson

Antwort

1

Wenn ich Sie richtig verstehe, Sie so etwas wie dies tun:

Store.find({}).then(..); 

Wenn Sie nur die Läden finden wollen, wo categoryID auf die Variable myCategory gleich ist, können Sie sie mit Hilfe herauszufiltern:

Store.find({semiCatID: myCategory}).then(..); 

Bitte lassen Sie mich wissen, wenn dies nicht das ist, wonach Sie suchen, dann können wir versuchen, dies gemeinsam herauszufinden.

EDIT: Also Sie senden die Variablen StoreID, CategoryID und SemiCategoryID vom Frontend. Sie erhalten sie im Backend und möchten Ihre Datenbanksammlung nach allen drei Feldern filtern? Wenn ja .. dann denke ich, alles, was Sie tun müssen, ist Ihre aktuelle Abfrage ändern:

wie
store.findOne({ _id: req.body.userID }, (err, store) => { console.log(store); }); 

Um etwas:

store.findOne({ 
    _id: req.body.userID, 
    storeID: req.body.StoreID, 
    categoryID: req.body.CategoryID, 
    semiCategoryID: req.body.SemiCategoryID 
}, (err, store) => { console.log(store); }); 

diese Weise werden die Objekte erhalten Sie wieder von Mongo müssen alle übereinstimmen vier Kriterien aus dem Frontend.

+0

Hallo, zuerst danke. Ich habe meinen Beitrag editiert, um meine Frage klarer zu stellen. Für jetzt ist dies mein Qurey .... store.findOne ({_id: req.body.userID}, (err, speichern) => { console.log (speichern); }); –

+0

@nircohen Ich habe die Antwort bearbeitet, hoffentlich die gewünschten Ergebnisse zu erzielen. – OArnarsson

+0

Ich habe versucht, Sie abzufragen, wenn Sie nicht sah, die Kategorie-ID und semiCategoryID im Array, die 'Elemente' aufrufen, also sollte ich items.categoryID und items.semiCategoryID verwenden? Vielen Dank für Hilfe! –

0

Soweit ich hier verstanden Ihre Frage ist meine Antwort Sie findById

Store.findById({//store id}).then(..); 

oder

Store.findOne({_id:ObjectID(storeID)}).then(..); 
+0

Ich verstehe deine Antwort nicht. weil ich nicht nach den 3 IDs filtern muss? (Store, Category, SemiCategory) Wie ich sehe sieht es so aus, als ob deine Antwort nur die Store-Werte liefert .. nein? –

Verwandte Themen