2017-11-26 11 views
0

多くの読書の後、私は立ち往生しています。 ここに投稿したコードは、私が作成しようとしているストアデータベースの実装です。店舗ごとに 、いくつかのフィールドがあります。 JSON変数を含む項目配列で何かをすることに興味があります。 私は3つのフィルタ、最初に店舗ID、次にカテゴリIDで項目をフィルタリングし、最後のフィルタはセミカテゴリIDになります。モンゴース特定の価値を見つける方法

フロントエンドから、STOREID、CategoryID、およびSemiCategoryIDを指定してデータを送信したいとします。 バックエンド側でデータを受信した後、フロントエンドから提供されたデータに従って該当するアイテムのみを受信する予定です。

{ 
    "_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 
} 

バックエンドでクエリに応じてフィルタリングされたアイテムを返すようにします。

問題は、私は正しいクエリを取得する管理していないです。

あなたの助けがはるかに高く評価され、

は事前にお願いします。私が正しくあなたを理解していれば、あなたはこのような何かをやっている

+0

を使用することができ、それに私の答えは、あなたはあなたが起こるしたいされているものよりよく説明することを試みることができます? mongoを呼び出す関数はどこですか?あなたの結果は何ですか?あなたの意図した結果は何ですか? – OArnarsson

+0

現在、ストアのみをポップする基本的なクエリmongooseがあります。categoryIDとsubcategoryIDに一致するすべての '項目'(名前)を取得したいと考えています。 ストアIDと一致するすべての項目(名前フィールド)を持つjsonリスト\配列を取得したい(すでに成功している)ほかのパラメータ(categoryID、semiCatyegoryID)と一致するようにしたい –

+0

オブジェクトをフェッチするので、 storeIDを取得しますが、Storeオブジェクトに値を設定しますか?これをチェックしてくださいhttp://mongoosejs.com/docs/populate.html – OArnarsson

答えて

1

:あなたが唯一のカテゴリIDは変数myCategoryに等しい店舗を検索したい場合は

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

は、あなたが使用してそれらをフィルタリングできます。

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

これがあなたの後でない場合は教えてください。その後、私たちはこれを一緒に把握しようとしています。

EDIT:だから、変数StoreIDCategoryIDとフロントエンドからSemiCategoryIDを送っています。バックエンドでそれらを受信し、3つのフィールドすべてに一致するデータベースコレクションをフィルタリングしたいですか? ..だから、私はあなたがしなければならないすべてはあなたの現在のクエリを変更すると思われる場合:

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

のようなものに:

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

この道を、あなたはモンゴから取り戻すのオブジェクトがすべて一致している必要がありますフロントエンドから与えられた4つの基準。私の知る限りは、ここにあなたの質問を理解して

+0

こんにちは、最初のおかげで。私は私の質問をより明確にするために自分の投稿を編集しました。 今のところ私のqureyは.... store.findOne({_id:req.body.userID}、(err、store)=> { console.log(store); }); –

+0

@nircohen私は希望の結果を得るために、答えを編集しました。 – OArnarsson

+0

私はあなたがdidntのcategoryIDとsemiCategoryIDを見たことがないとクエリを試してみましたが、配列の中に 'items'というコールがありますので、items.categoryIDとitems.semiCategoryIDを使用する必要がありますか? ありがとうございました!クエリ内で –

0

あなたはfindById

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

または

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

私はあなたの答えを理解していません。 なぜなら、3つのIDでフィルタリングする必要はないからです。 (Store、Category、SemiCategory)私の見た目があなたの答えのように見えるので、私は店の価値だけを与えるでしょう。いいえ? –

関連する問題