mongodb
安装教程 https://www.runoob.com/mongodb/mongodb-osx-install.html
进入 /usr/local
cd /usr/local
下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz
解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz
重命名为 mongodb 目录
sudo mv mongodb-osx-x86_64-4.0.9/ mongodb
vim ~/.zshrc 添加下面
export PATH=/usr/local/mongodb/bin:$PATH
source ~/.zshrc // 生效 创建日志及数据存放的目录: 数据存放路径:
sudo mkdir -p /usr/local/var/mongodb
日志文件路径:
sudo mkdir -p /usr/local/var/log/mongodb
接下来要确保当前用户对以上两个目录有读写的权限:
sudo chown runoob /usr/local/var/mongodb
sudo chown runoob /usr/local/var/log/mongodb
以上 runoob 是我电脑上对用户,你这边需要根据你当前对用户名来修改。
mongod -f /root/mongodb/etc/mongodb.conf 使用配置文件启动(服务器)
mongod --config /usr/local/etc/mongod.conf 启动本地mongodb (本地)
/usr/local/mongodb/bin (本地进入)
./mongo // 进入mongodb操作模式
基本操作说明:
show dbs // 查看数据库
use demo // 选择数据库(没有的话创建)
db.dropDatabase() // 删除数据库
show collections // 查看集合
db.demo.drop() // 删除集合
db.createCollection('demo') // 创建集合
db.demo.insert({id:123,name:'conan'}) // 创建并插入集合
db.demo.update({id:'123',{$set:{name:'kids'}}}) // 更新文档
db.demo.update({id:'123',{$set:{'class.name':'jd'}}}) // 更新子集字段
db.demo.remove({id:123}) // 删除文档
db.demo.find() // 查看集合
db.demo.find().pretty() // 查看集合(格式化形式显示)
db.demo.findOne() // 查看第一条集合的数据
db.demo.find({id:123}) // 按条件查询(findOne()同样用法)
db.demo.findOne({age:{$gt:20}) // 大于20($lt=>小于,$eq=>等于,$gte=>大于等于,$lte=>小于等于)
...
服务器上docker下mongodb操作
下载,取最新版的 MongoDB 镜像
docker pull mongo:latest
查看镜像
docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
docker.io/library/mongo | latest | 5285ea55 | 13 days ago | 703 MB |
安装成功: 查看容器运行信息
docker ps
使用以下命令添加用户和设置密码
docker run -d -p 27017:27017 --name mongo -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo --auth // 运行容器的时候设置管理员用户名
使用以下命令添加用户和设置密码,并且尝试连接。 a7e5ca69容器id
docker exec -it a7e5d4a69 mongo // 查看本地镜像
尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')
权限设置
我本地配置文件的路径是:vim data/mongodb/config/mongod.conf userKey
security:
authorization: enabled // 设置启用登录验证 可设置disabled
完整的配置:
systemLog:
destination: file
path: "logs/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "data/mongodb/db"
net:
port: 27017
security:
authorization: enabled
创建普通用户
>use test
>
db.createUser(
{
user:"test",
pwd: "test",
roles: [{ role: "readWrite", db: "runoob"}]
}
)
Successfully added user: {
"user" : "test1",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
> exit
创建超极用户root
use admin
db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
);
创建管理员账号: admin数据库是管理用户权限的数据库。
use admin
db.createUser(
{
user: "manage",
pwd: "manage", // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
查看创建的用户
show users 或 db.system.users.find() 或 db.runCommand({usersInfo:"userName"})
修改密码
use admin
db.changeUserPassword("username", "xxx")
修改密码和用户信息
db.runCommand(
{
updateUser:"username",
pwd:"xxx",
customData:{title:"xxx"}
}
mongodb增删改查操作
增加数据,语法: db.collectionName.isnert(document)。
#不指定文档的id,数据库会默认分配一个随机id
db.user.insert({name:'zhaos',age:23,sex:'f'});
#指定文档的id
db.user.insert({_id:5,name:'zhaos',age:23,sex:'f'});
#增加单个文档
db.user.insert({_id:6,name:'zhaos',age:23,sex:'f'});
#增加多个文档
db.user.insert([{_id:2,name:'zhangs',age:21,sex:'m'},{_id:3,name:'wangw',age:22,sex:'m'},{_id:4,name:'zhaos',age:23,sex:'f'}]);
删除数据,语法: db.collection.remove(查询表达式, 选项)。选项是指需要删除的文档数,{0/1},默认是0,删除全部文档。
#将所有_id=7的文档删除
db.user.remove({_id:7})
#将gender:’m’的所有文档删除
db.user.remove({gender:'m'})
#只删除一个gender:’m’的文档,num是指删除的文档数
db.user.remove({gender:'m',1})
修改数据,语法: db.collection.update(查询表达式,新值);
从结果可以看出,这只是在替换一个文档,并非修改一个文档字段
> db.user.update({name:'zhangs'},{name:'liul'})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find();
{ "_id" : 2, "name" : "liul" }
修改一个文档的字段,必须使用$set:{属性:’值’}
> db.user.update({name:'zhaos'},{$set:{name:'kongkong'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find();
{ "_id" : 6, "name" : "kongkong", "age" : 23, "sex" : "f" }
修改时的赋值表达式
$set 修改某列的值
db.user.update({name:'zhaos'},{$set:{name:'kongkong'}})
$unset 删除某个列
db.user.update({name:'kongkong'},{$unset:{name:'kongkong'}})
$rename 重命名某个列
db.user.update({_id:6},{$rename:{sex:'gender'}})
db.user.update({},{$rename:{'sex':'gender'}},{multi:true})
$inc 增长某个列
db.user.update({_id:6},{$inc:{age:2}})
$setOnInsert 当upsert为true时,并且发生了insert操作时,可以补充的字段.
db.user.update({_id:7},{$setOnInsert:{age:5,gender:'f'}},{upsert:true})
查找数据,语法: db.collection.find(查询表达式,查询的列)。
#查询一个表中的所有文档
db.user.find()
#查询特定属性的文档
db.user.find({_id:3})
#查询所有文档,显示gender列,不显示id
db.user.find({},{gender:1,_id:0})
#查询所有gender:’m’的文档,显示gender列,age列,不显示id
db.user.find({gender:'m'},{gender:1,_id:0,age:1})
mongoose实际使用
mongoose安装
npm install mongoose
mongoose连接
const mongoose = require('mongoose')
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express,very good!' });
});
mongoose.connect('mongodb://test:test@127.0.0.1:27017/runoob?authSource=admin', { useNewUrlParser: true, useUnifiedTopology: true })
mongoose.connection.on('connected', () => {
console.log('MongoDb connected successful!')
})
mongoose.connection.on('err', () => {
console.log('MongoDb connected fail!')
})
mongoose.connection.on('disconnected', () => {
console.log('MongoDb disconnected!')
})
一个user.js的Schema
/*
定义一个user的Schema
*/
var mongoose = require('./db.js');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
username: { type: String }, // 用户名
password: { type: String }, // 密码
age: { type: Number }, // 年龄
});
/* model 是由schema生成的模型,具有对数据库操作的能力 */
module.exports = mongoose.model('User', UserSchema);
插入数据(Model.save([fn])),代码如下:
var User = require('./user.js');
// 插入数据
var user = new User({
username: 'kongzhi0707',
password: '123456',
age: 30
});
user.save(function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
更新数据(Model.update(conditions, doc, [options], [callback]))
var User = require('./user.js');
// 更新数据
function update() {
// 更新数据的条件查询
var wherestr = {'username': 'kongzhi0707'};
// 执行更新数据
var updatestr = {'password': 'abcdef'};
User.update(wherestr, updatestr, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
}
// 调用更新函数
update();
findByIdAndUpdate(id, [update], [options], [callback]);根据id进行更新;此id就是数据库中自动生成的id;如下代码,
var User = require('./user.js');
// 更新数据
function update() {
// 更新数据的条件查询
var id = '5b3a4941ca11752732fee772';
// 执行更新数据
var updatestr = {'password': 'vvvvv'};
User.findByIdAndUpdate(id, updatestr, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
}
// 调用更新函数
update();
删除 Model.remove(conditions, [callback])
var User = require('./user.js');
function del() {
// 删除数据的条件
var wherestr = {'username': 'kongzhi0707'};
User.remove(wherestr, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
}
// 调用函数
del();
条件查询 Model.find(conditions, [fields], [options], [callback]); 如下代码所示:
var User = require('./user.js');
function find() {
// 删除数据的条件
var wherestr = {'userName': '龙恩0707'};
User.find(wherestr, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
}
// 调用函数
find();
数量查询 Model.count(conditions, [callback])
var User = require('./user.js');
function getCountByConditions() {
User.count({}, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res); // 会输出数据库数据的数量
}
});
}
// 调用函数
getCountByConditions();