2017-01-15 7 views
0

私はreq.bodyから取得したパラメータと、req.user._idというクエリを渡して、Mongoose Model.find()関数を使用してデータベースからデータを取得したいと考えています。正しいデータを返さないreq.bodyを使ったマングースクエリ

は、これまでのところ、私がやった私のreq.bodyreq.user._idを配置し、次のようにPost.find()にそれらを通過している:

getUserPosts: function(req, res) { 
     req.body.user = "" + req.params.id; 
     var query = JSON.stringify(req.body); 
     Post.find(query, function(err, posts) { 
      if(err) return res.status(500).json({error: unknownError}); 
      else if(posts) return res.status(200).json({posts}); 
     }); 
    } 

問題があります。私は送信しているクエリと一致しないデータ結果を取得し続けます。私はおそらく何がここで間違っていることができますか?

答えて

1

...そのJSON.stringify部分を削除します。クエリパラメータには、指定された値と一致するフィールド名(キー)を含むキー/値オブジェクトが必要です。たとえば、var query = {_id:req.body._id}です。

第2 ...とは何ですか。req.body.user = req.params.id

決勝コード:

getUserPosts: function(req, res) { 
    var query = { _id: req.params.id }; 
    Post.find(query, function(err, posts) { 

     if(err) return res.status(500).json({error: unknownError}); 
     else if(posts) return res.status(200).json({posts}); 
    }); 
} 
+0

'req.body'フィールドに' req.params.id'フィールドと同じ 'user'フィールドを追加しています。' {status:2、 user: '586a24d9319242157dcd796e}} ' userの値は 'req.params.id'です。 – SalmaFG

+0

問題は実際には 'JSON.stringify'にありました。私は以前にそれを試してみたと思っていたし、うまくいかなかったが、明らかにそうではなかった。どうもありがとう! – SalmaFG

+0

req.body&paramsの2つのフィールドで同じ値を渡すのはなぜですか?また、なぜ関数でそれを上書きするのですか?申し訳ありませんが、私は理解できません。だから、私に次のことを教えてください:**(A)** stausの値2はどこから来たのですか?それは固定されているか、要求の本文に入っていますか? **(B)** req.body.userまたはreq.params.idのObjectId値? –

0

あなたはそれを定義しましたreq.body.user = "" + req.params.id; params.idが投稿のPost.userであるかどうかわかりません。私はあなたがreq.bodyのオブジェクトをプリントアウトし、それはMongoDBの中にあなたのPostモデルに存在するかどうかをお勧め

: ものは何でも、あなたのreq.bodyは{IDユーザー}となりました。

さらに、mongodbでは、生成された_idはstringではなくObjectIdです。あなたはmongodbにログインし、データの形式を理解しているはずです。

モンゴで、次の例を参照してください:まず

> db.Post.find({"_id":"5786d286ed4b71f473efbd99"}) 
// nothing 
> db.Post.find({"_id":ObjectId("5786d286ed4b71f473efbd99")}) 
{ "_id" : ObjectId("5786d286ed4b71f473efbd99"), "created" : ISODate("2016-07-13T23:45:10.522Z") } 
+1

しかし、私はMongoDBのを使用して直接照会ではないのです。私はMongooseを使用していて、 'id'はMongooseの文字列としてうまく動作します。 – SalmaFG

関連する問題