$ brew tap mongodb/brew
$ brew install mongodb-community
$ brew services start mongodb-community # 后台启动,win 系统 net start mongodb
$ brew services stop mongodb-community # 后台停止,win 系统 net stop mongodb
$ mongod --config /usr/local/etc/mongod.conf # 手动启动,mongod.conf 为设置
$ mongo admin --eval "db.shutdownServer()" # 手动停止
$ mongodump -d dbname # 备份,bson 格式,-d 为备份数据库,-c 为备份集合
$ mongorestore # 恢复数据库
$ mongo dbname # 进入(某)数据库,数据库名可选
# 数据 /usr/local/var/mongodb
# 日志 /usr/local/var/log/mongodb
> show dbs; # 所有数据库,初始 admin、config、local
> exit
增删改查
> use blog; # 新建/进入某数据库
> show collections; # 所有集合
> db.stats(); # 数据库信息
> db.dropDatabase(); # 删除数据库
> db.createCollection('users'); # 新建集合
> db.users.renameCollection('posts'); # 集合改名
> db.posts.drop(); # 删除集合
> db.posts.count(); # 文档数
# 循环插入文档,自动生成 _id 和 __v
> for (var i = 1; i <= 10; i++) { db.posts.insert({ title: '第' + i + '篇博客', tag: ['未分类'] }); }
# 删除文档,{} 为清空集合
> db.posts.remove({ title: '新文章' });
# 字段的所有值,set 类型无重复
> db.posts.distinct('tag');
# 且条件,接收正则表达式,如 /k/ 为含k,/^k/ 为以k开头
# $gte 为 >=,$gt 为 >
# $lte 为 <=,$lt 为 <
# $eq 为 =,$ne 为 !=
> db.posts.find({ 'tag': 'game', 'title': /u/, 'rank': { $gte: 5 } });
# 或条件
# $in 枚举,$exists 存在判断
> db.posts.find({ $or: [{ 'title': /u/ }, { 'rank': { $in: [3, 4] }, { 'istop': { $exists: true } } }] });
# 查找,空参数 () 为所有文档,参数为条件和显示选定字段
# 1 显示 0 不显示,_id 默认显示
# 排序 sort(),1 正序 -1 倒序,字段不存在排序为 0 最小
# 取前排 limit(),跳过前排 skip(),常用于翻页
> db.posts.find({}, { title: true, rank: 1, _id: 0 }).sort({ rank: -1 }).skip(3).limit(3);
# 相当于 limit(1),默认更新顺序,即 _id 正序
> db.posts.findOne({}, { _id: 0 });
# 默认更新第 1 条查询,即 findOne() 方式
# multi 更新所有,即 find() 方式
# $set 更新指定字段(新增或修改)
> db.posts.update({ 'tag': 'it' }, { $set: { 'rank': 60 } }, { multi: true });
# $inc 字段值相加,$mul 字段值相乘
> db.posts.update({ 'tag': 'it' }, { $inc: { rank: 1 } });
# $rename 字段改名
> db.posts.update({ 'tag': 'it' }, { $rename: { 'rank': 'score' } });
# $unset 删除字段
> db.posts.update({ 'tag': 'it' }, { $unset: { 'istop': true } });
# upsert 有查询结果则更新,无则追加
> db.posts.update({ title: '新文章' }, { title: '新文章', 'rank': 5 }, { upsert: true });
# 查询索引,默认 {_id:1} 索引,1 正序 -1 倒序
> db.posts.getIndexes();
> db.posts.createIndex({ title: 1 }, { unique: true }); # 新建索引
> db.posts.dropIndex({ rank: -1 }); # 删除索引
网友评论