设置数据库

mongod.exe --dbpath D:\mytools\mongodb\data // 非安全启动

mongod.exe --auth --dbpath D:\mytools\mongodb\data\db // 安全启动

命令行运行mongod.exe

结果如下:

错误原因:

官方最新版的MongoDB需要: VC++2015 RC x64的支持,否则会报出

下载网址:https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

可以通过命令: msinfo32 产看自己电脑的版本等系统信息。


添加管理员

db.createUser({user: 'root',pwd: '123456789',roles: ['dbOwner']})

注:3.4以前的addUser已经被废弃

添加基本安全设置以后访问方式

mongo 127.0.0.1:27017/mydb -u root -p // 回车后输入密码

crud 操作

选中数据库

use mydb

db.user.save(a); //db.表名.save(数据)

db.user.remove( {name : "user1" } )

db.user.update( {"_id" : ObjectId("595b406f24ceea3ec9ef1c85"),"name" : "user1"}, {$set:{name:"user3", card:"KK8566"} } );

// db.表名.update({修改字段: 原值}, {$set: {修改字段:修改值}})

db.user.find({"name": "进击的废材"});

// db.表名.find();

// 接 .forEach( printjson); 去重打印
// findOne() 返回查询首个的值
// 接 .limit(数字); 限制结果集

基于mongoose的增删改查

安装npm依赖mongoose

npm install mongoose -save

创建连接

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/mydb';

/**
 * 连接
 */
mongoose.connect(DB_URL);

/**
  * 连接成功
  */
mongoose.connection.on('connected', function () {
    console.log('Mongoose connection open to ' + DB_URL);
});

/**
 * 连接异常
 */
mongoose.connection.on('error',function (err) {
    console.log('Mongoose connection error: ' + err);
});

/**
 * 连接断开
 */
mongoose.connection.on('disconnected', function () {
    console.log('Mongoose connection disconnected');
});

module.exports = mongoose;

创建Sechma(DAO层)

// 拿到Schema
var mongoose = require('./db.js');
var Schema = mongoose.Schema;
// 创建关系
var PlayerSchema = new Schema({
  name: {
    type: String
  },
  team: {
    type: Number
  },
  canBeSelected: {
    type: Boolean
  }
}, {
  versionKey: false
});

module.exports = mongoose.model('Player', PlayerSchema);
  • versionKey: false 的作用:

    {versionKey: false}是干嘛用?如果不加这个设置,我们通过mongoose第一次创建某个集合时,它会给这个集合设定一个versionKey属性值,这个属性值包含这个文档的内部版本,数据库中显示为_v,如图:

增删改查(基本可以算是service层)

playerService.insertPlayer = function(name, team, getInfoBack) {
  var player = new Player({
    name: name,
    team: team,
    canBeSelected: true
  });

  player.save(function(err, res) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      console.log("Res:" + res);
      getInfoBack(res);
    }
  });
}

playerService.deletePlayer = function(_id, getInfoBack) {
  Player.remove({
    _id: _id
  }, function(err, res) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      console.log("Res:" + res);
      getInfoBack(res);
    }
  });
}

playerService.updatePlayer = function(_id, team, getInfoBack) {
  console.log('_id:' + _id);
  console.log('team:' + team);
  Player.update({
    _id: _id
  }, {
    team: team
  }, function(err, res) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      console.log("Res:" + res);
      getInfoBack(res);
    }
  });
}

playerService.findAllPlayers = function(getInfoBack) {
  Player.find({}, function(err, docs) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      console.log("Res:" + docs);
      getInfoBack(docs);
    }
  });
}

playerService.findPlayerById = function(id, getInfoBack) {
  Player.findOne({
    _id: id
  }, function(err, docs) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      getInfoBack(docs);
    }
  });
}

playerService.findPlayerByTeam = function(team, getInfoBack) {
  Player.find({
    team: team
  }, function(err, docs) {
    if (err) {
      console.log("Error:" + err);
      getInfoBack(err);
    } else {
      getInfoBack(docs);
    }
  });
}

mongodb 使用脚本

mongodb 是基于js的,所以可以使用js脚本进行数据的保存或者复制 使用脚本的方式是讲脚本放入 mongodb 所在的bin目录下,然后运行命令行.

比如:

js脚本test.js

for (var i = 100 - 1; i >= 0; i--) {
  var tempNo = parseInt((Math.random() * 8)) + 1;
  var player = {
    name: '测试' + i,
    team: NumberInt(tempNo.toFixed(0)), // 使用NumberInt 是为了去掉小数点
    canBeSelected: true
  }
  db.players.save(player);
}
print('over');

执行脚本的命令

mongo 127.0.0.1:27017/mydb --quiet test.js

results matching ""

    No results matching ""