実現したいこと
mongooseでスキーマを作成し、自作したjsonAPIでその値を取得しています。
そのレスポンスを下記のような形で返すようにしたいのですが、どのように実装すればよいか悩んでいます。
方法や実装のヒントをご教示いただけると幸いです。
response
1{ 2"count":2, 3 "user":[ 4 { 5 "_id": "5f2a09ea2632db5bde8562dd", 6 "accountnumber":"111111", 7 "username":"huga", 8 "department":"AAA", 9 "email":"test@example.com", 10 "password": "asdfgh", 11 "date": "2020-08-05T01:22:40.473Z" 12 }, 13 { 14 "_id": "5f2a09e02632db5bde8562db", 15 "accountnumber":"222222", 16 "username":"bar", 17 "department":"BBB", 18 "email":"test@example.com", 19 "password": "xsw23edc", 20 "date": "2020-08-05T01:22:50.696Z" 21 } 22 ] 23}
現在使用している定義
現在、mongooseのスキーマは下記定義を使用しています。
userModel
1var mongoose = require('mongoose'); 2var Schema = mongoose.Schema; 3 4var UserSchema = new Schema({ 5 accountnumber: { type: String, require: true, unique: true }, 6 membername: { type: String, require: true }, 7 department: { type: String, require: true }, 8 mail: { type: String, require: true }, 9 password: { type: String, require: true }, 10 date: { type: Date, default: Date.now } 11}); 12 13module.exports = mongoose.model('User', UserSchema);
response
1[ 2 { 3 "_id": "5f2a09e02632db5bde8562db", 4 "date": "2020-08-05T01:22:40.473Z", 5 "accountnumber": "102226", 6 "membername": "huga", 7 "department": "AAA", 8 "mail": "test@example.com", 9 "password": "asdfgh", 10 "__v": 0 11 }, 12 { 13 "_id": "5f2a09ea2632db5bde8562dd", 14 "date": "2020-08-05T01:22:50.696Z", 15 "accountnumber": "222222", 16 "membername": "foo", 17 "department": "BBB", 18 "mail": "test@example.com", 19 "password": "xsw23edc", 20 "__v": 0 21 } 22]
また、API呼び出し部分のロジックの抜粋は下記です。
nodejs
1var express = require('express'); 2var router = express.Router(); 3var UserModel = require('../../userModel.js'); 4 5router.route('/') 6 .post(async (req, res) => { 7 var User = new UserModel(); 8 9 console.log('挿入する中身は', req.body); 10 User.accountnumber = req.body.accountnumber; 11 User.membername = req.body.membername; 12 User.department = req.body.department; 13 User.mail = req.body.mail; 14 User.password = req.body.password; 15 16 await User.save() 17 .then(result => { 18 res.json({ message: '1件のmember情報登録しました!!' }); 19 console.log("1件のmember情報登録しました"); 20 }) 21 .catch(err => { 22 res.send(err) 23 console.error(err) 24 }) 25 })
「実現したいこと」に記載したように、
データ内の件数を取得して"count"として出力、
レスポンスされるデータを"user"[{}]で囲みたいのですが、どのように実現すればよいかご教示いただけないでしょうか。
試したこと
スキーマの定義を以下のように変更してみましたが、意図したレスポンスにはならずでした。
例えば、"count"はスキーマに含めず、アプリ側のロジック(mongoDBからcountDocumentsで取得して、レスポンスに組み込む)として実装すべきなのでしょうか?
schema
1var UserSchema = new Schema({ 2 count:Number, 3 user[{ 4 accountnumber: { type: String, require: true, unique: true }, 5 membername: { type: String, require: true }, 6 department: { type: String, require: true }, 7 mail: { type: String, require: true }, 8 password: { type: String, require: true }, 9 date: { type: Date, default: Date.now } 10 }] 11});
補足情報(FW/ツールのバージョンなど)
mongoDB:4.4.0
node.js:10.19.0
よろしくお願いいたします。
あなたの回答
tips
プレビュー