質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

0回答

1309閲覧

node.js+express+moogoseを使用したjsonAPIのレスポンス内容を編集したい

Taka-M

総合スコア3

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/08/05 01:59

編集2020/08/06 01:18

実現したいこと

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

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問