MongoDBでusersというコレクションを作成しました。デフォルトで生成されるObjectIdの_idとは別に、ユニークでシーケンスな"uId"が必要だったため、カウンターズコレクションを使い"uId"を作成しました。そして以下のようにuIdを条件に検索をかけてデータが返ってくるようなコードを作成しました。
app.get("/api/user/:id", (req, res) => { console.log(req.params.id); await this.User.findOne({ uId: req.params.id }) .exec() .then((user) => { res.json(user); }); });
http://localhost:4000/api/user/3 でuId:3である値が返ってくるか試したところ、usersコレクションの一番最初に格納されているデータが返ってきました。
/*http://localhost:4000/api/user/3*/ {"_id":"6235te783aio0hsbms3z5976", name:"omochi", uId:1}
試しに検索の方法をqueryに変えてみましたが結果は同じくコレクション内にある最初のデータが返ってきました。
app.get("/api/user", (req, res) => { console.log(req.query.id); await this.User.findOne({ uId: req.query.id }) .exec() .then((user) => { res.json(user); }); }); /*http://localhost:4000/api/user?uId=3*/ {"_id":"6235te783aio0hsbms3z5976", name:"omochi", uId:1}
検索条件の中身をuIdからデフォルトで生成された_idに書き換えて、下記のように_idで検索してみたところ、_idで指定したデータが返ってきました。
/*http://localhost:4000/api/user/6434de543ere7weee3a56e5*/ {"_id":"6434de543ere7weee3a56e5", name:"dango", uId:3}
デフォルトで生成された_idを利用すれば上記のコードは期待通りに動いてくれるのですが、uIdを条件に検索するとうまくいきません。
カウンターズコレクションに関してですが、まずカウンターズコレクションはMongoAtlasで作成しました。そのあとは"MongoDB Auto-Increment"というMongoDBのウェブサイトを参考に作成しました。
jsファイル内にはuserSchemaのみを宣言しています。
わかりにくい説明で申し訳ないですが、シーケンスを利用し生成したuIdでデータ検索をする方法を教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。