Node.js
MongoDB
mongoose

初心者がmongoose公式 勉強するメモ model編

mongoose model

今回のお題はこちらです。

http://mongoosejs.com/docs/models.html

  • 英語ですので、chromeの翻訳を使って下さい。
  • 検証結果は、掲載しませんので、実際確認してみてください。

default接続まで

  • model.js
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test"); // default 接続 DB: test

// 最初のモデル
const yourSchema = new mongoose.Schema({ name: 'String', size: 'String' });
const Tank = mongoose.model('Tank', yourSchema); // default 接続  tanks

// 書類の作成
const small = new Tank({name: 'Yasu2', size: 'large2'});

small.save(err => {
  if (err) console.error(err)
  console.log('saved')
  mongoose.disconnect();
});

  • mongoose.model使用すると、default connection(mongoose.connect)が使われるそうです。
  • node model.js でsaveが実行されます。
  • mongo シェルで確認するとちゃんと出来ています。DB: test collection: tanks

カスタム接続

  • model.js
const mongoose = require("mongoose");
const connection = mongoose.createConnection('mongodb://localhost:27017/apple'); // DB: apple

const yourSchema = new mongoose.Schema({ name: 'String', size: 'String' });
const Tank = connection.model('Tank', yourSchema); // カスタム接続

// 書類の作成
const small = new Tank({name: 'Yasu3', size: 'large3'});

small.save(err => {
  if (err) console.error(err)
  console.log('saved')
  mongoose.disconnect();
});


  • 接続するDB,コレクションを個別にするみたいです。
  • アクセスするDBをインスタンス毎に、個別に指定したい場合に必要になりますね。
  • こちらもmongoシェルで確認すると出来ています。(DB名はappleです。)

クエリ

  • model.js
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test");

const yourSchema = new mongoose.Schema({ name: 'String', size: 'String' });
const Tank = mongoose.model('Tank', yourSchema); // tanks

Tank.find({size: 'large'}).where({name: 'Yasu'}).exec((err, docs) => {
  if (err) console.error(err);
  for (let val of docs) {
    console.log(val);
    mongoose.disconnect();
  }
})

  • クエリで細かい指定も出来るみたいです。
  • 上の条件は、size: 'large' and name: 'Yasu'

削除

  • model.js
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test");

const yourSchema = new mongoose.Schema({ name: 'String', size: 'String' });
const Tank = mongoose.model('Tank', yourSchema); // tanks

Tank.remove({size: 'large'}, err => {
  if (err) console.error(err);
  console.log('removed');
  mongoose.disconnect();
})

  • mongoシェル確認 OK

update

  • model.js
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/test");

const yourSchema = new mongoose.Schema({ name: 'String', size: 'String' });
const Tank = mongoose.model('Tank', yourSchema); // tanks

Tank.findOneAndUpdate({size: 'small'},{ name: 'Banana'}, err=> {
  if (err) console.error(err);
    console.log('update')
    mongoose.disconnect()
})

Tank.update({size: 'middle'}, {$set: {name: 'Orange'}}, {upsert: true, multi: true}, (err) => {
  if (err) console.error(err);
  console.log('update');
  mongoose.disconnect()
} )
  • mongoシェルにて確認 OK

  • modelは、これで終了です。

  • 少しづつ使い方が判ってきました。