Mongoose + express でネストされたスキーマモデルをsaveしたい.
現在ExpressとMongooseで jsonAPIを作成しております.
2つのモデルを合成してsaveしたいです.
// app/models/room.js
var mongoose = require('mongoose');
var TmpSchema = require('./tmp');
var Schema = mongoose.Schema;
var RoomSchema = new Schema({
users: [TmpSchema],
host_user: String
});
module.exports = mongoose.model('Room', RoomSchema);'
こちらは子となるモデルです.
// app/models/tmp.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var TmpSchema = new Schema({
user_id : String
} , { _id: false});
module.exports = mongoose.model('Tmp', TmpSchema);
このような状態の時,POSTメソッドが呼び出された時にroomモデルのレコードを保存したいです.
// server.js
// call the packages we need
var express = require('express'); // call express
var app = express(); // define our app using express
var bodyParser = require('body-parser');
// use MongoDB
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/edisonHTTPRequestAPI'); // connect to our database
// use Model
var User = require('./app/models/user');
var Room = require('./app/models/room');
var Tmp = require('./app/models/tmp');
~~~~
router.route('/rooms')
// create a users (accessed at POST http://localhost:3000/api/rooms)
.post(function(req, res) {
var room = new Room();
room.host_user = req.body.host_user;
if(req.query.userID != null){
var users = req.query.userID.split(" ");
for(var i = 0;i<users.length;i++){
var tmp = new Tmp();
tmp.user_id = users[i];
tmp.save();
room.users[i] = tmp;
}
}
room.save(function(err) {
if (err)
res.send(err);
console.log(room);
res.json({ message: 'Room created!' });
});
})
上記の様な記述を行いました.
そこで,例えば以下のようにPOSTメソッドを叩くと,意図したjsonが帰ってきます.
また,server.js
内で,console.log(room)
と行うと,ログも以下のように正常な値が帰ってきます.
{ __v: 0,
host_user: 'test',
_id: 5667de123b5a5caf9c000001,
users:
[ { __v: 0, user_id: 'abc' },
{ __v: 0, user_id: 'def' },
{ __v: 0, user_id: 'ghi' } ] }
しかし,このidを用いてsaveしたデータを確認すると,データの中にusersの要素が含まれていませんでした.
$ curl http://localhost:3000/api/rooms/5667de123b5a5caf9c000001
//result
{"_id":"5667de123b5a5caf9c000001","host_user":"test","__v":0,"users":[]}
これは何が原因なのでしょうか…
ご教授願います.