1. 程式人生 > >mongoose學習筆記

mongoose學習筆記

any bind wan gte delete mis 創建model remove 插入

一、為什麽使用mongoose

 1、避開連接mongo經常要 db.open()和db.close(),數據庫操作頻繁就會出現

  Error: db object already connecting, open cannot be called multiple times

   用mongoose就不會出現這錯誤勒,因為一旦連接好數據庫,db就會處於open狀態,不存在訪問時要打開,然後又要關閉的規則

  2、Mongoose庫簡而言之就是在node環境中操作MongoDB數據庫的一種便捷的封裝,一種對象模型工具,類似於ORM工具

二、mongoose的使用

1、mongoose連接

const mongoose = require(‘mongoose‘);
var db=mongoose.createConnection(‘mongodb://39.104.166.99:27017/runoob‘);

db.on(‘error‘, console.error.bind(console, ‘connection error:‘));
db.once(‘open‘, function () {
    console.log(‘mongo is open‘)
    // we‘re connected!
});

2、創建集合

var Schema = mongoose.Schema;
var userObj = new Schema({ name: { type: String, index: { unique: true } }, nick: String, password: String, email: String, submit: Number, solved: Number, regTime: String, privilege: String }); //註冊靜態方法 findByName userObj.static(‘findByName‘, function (name, callback) {
return this.find({ name: name }, callback); }) // 創建users集合 var users = db.model(‘users‘, userObj);

3、插入數據

var user = {
    name: ‘zhouba‘,
    nick: ‘周八‘,
    password: ‘123456‘,
    email: [email protected],
    submit: 1,
    solved: 1,
    regTime: ‘String‘,
    privilege: ‘String‘
}

//創建用戶
var createUser = new users(user);
createUser.save((err, doc) => {
    if (err) console.log(‘err:‘ + err);
    console.log(doc);
})

// or
users.create(user, (err, doc) => {
    if (err) console.log(‘err:‘ + err);
    console.log(doc);
})

4、修改數據

//修改
users.update({ name: ‘zhouba‘ }, { submit: 2 }, (err, rlt) => {
    if (err) console.log(‘err:‘ + err);
    console.log(rlt);
})

//批量修改  { multi: true }
users.update({ name: ‘zhouba‘ }, { nick: ‘粥吧‘ }, { multi: true },(err, rlt) => {
    if (err) console.log(‘err:‘ + err);
    console.log(rlt);
})

5、刪除數據

//刪除刪除所有符合條件的文檔
users.remove({ submit: 1 }, (err, rlt) => {
    if (err) console.log(‘err:‘ + err);
    console.log(rlt); //{ ok: 1, n: 1 }
})

//最多刪除一個文件符合條件的文檔
users.deleteOne({ name: ‘Eddard Stark‘ }, function (err) { });

//最多刪除所有符合條件的文檔,表現的像remove
users.deleteMany({ name: /Stark/, submit: { $gte: 18 } }, function (err) { });

6、查找數據

//查找
users.find({ name: ‘zhouba‘ }, (err, docs) => {
    if (err) console.log(‘err:‘ + err);
    console.log(docs);
})

//where 條件 .where(‘age‘).gte(21).lte(65).where(‘name‘, /^b/i)
users.where(‘submit‘).gte(2).exec((err, docs)=> {
    if (err) console.log(‘err:‘ + err);
    console.log(‘docs:‘ + docs);
})

7、其他

//Query
var query = users.find();
//查詢
query.exec(function (err, docs) {
    if (err) console.log(‘err:‘ + err);
    console.log(docs);
})

//or  use promise
var promise = query.exec();
promise.then(function (resolve, reject) {
    if (reject) console.log(‘err:‘ + reject);
    console.log(resolve);
})

//findById mongoose自帶
users.findById(‘5ae45b6258d8122414f5498b‘, function (err, docs) {
    if (err) console.log(‘err:‘ + err);
    console.log(docs);
})

//此方法為創建model時註冊的靜態方法
users.findByName(‘wangwu‘, (err, docs) => {
    if (err) console.log(‘err:‘ + err);
    console.log(docs);
})

更過mongoose API: http://mongoosejs.com/docs/api.html

mongoose學習筆記