UP | HOME

MongoDB

Table of Contents

安装

使用apt, yumd或自行编译等等方式安装。
详细,请查看 https://docs.mongodb.com/manual/installation

命令

连接

#
mongo ip:port/dbname -u 用户名 -p 密码
#若无法查询
rs.slaveOk() || rs.secondaryOK()
➜  ~ mongo 127.0.0.1:27017/test
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/test?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("dcc9c3ce-9b40-406c-889e-a8284833264d") }
MongoDB server version: 4.4.3
---
The server generated these startup warnings when booting:
2021-02-05T11:55:27.759+08:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-02-05T11:55:28.636+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-02-05T11:55:28.636+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>

基本操作

数据库

show dbs; #查看所有数据库列表
show collections; #显示当前数据库中的集合
show users; #显示用户
use dbname; #切换数据库
db.help(); #显示数据库操作命令列表
db.foo.help(); #显示集合操作命令列表

插入

db.COLLECTION_NAME.insert(document); #向指定集合中插入一条文档数据
db.user.insert({"name":"josephzeng"}); #exmpale

db.COLLECTION_NAME.insertOne(document); #向指定集合中插入一条文档数据
db.user.insertOne({name: 'josephzeng', age:12}); #example

db.COLLECTION_NAME.insertMany(documents); #向指定集合中插入多条文档数据
db.user.insertMany({name: 'cs', age:12},{name: 'cs', age:12}); #example

删除

db.dropDatabase(); #删除当前所在的数据库
db.COLLECTION_NAME.drop();  #删除该数据库下的集合表
db.COLLECTION_NAME.remove({});  #删除集合表中的所有的文档
db.COLLECTION_NAME.remove({'title':'MongoDB'}); #删除集合表中的所有title为MongoDB的文档
db.COLLECTION_NAME.remove({'title':'MongoDB'}, 1); #删除1条集合表中的title为MongoDB的文档
db.user.drop(); #example
db.COLLECTION_NAME.deleteOne(query); #删除单个文档
db.COLLECTION_NAME.deleteMany(query); #删除多个文档
db.user.deleteOne({'name':'josephzeng'}); #exampel

更新

       /*
        * query : update的查询条件,类似sql update查询内where后面的。
        * update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
        * upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
        * multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
        * writeConcern :可选,抛出异常的级别。
        */
       db.COLLECTION_NAME.update(
               <query>,
               <update>,
               {
                       upsert: <boolean>,
                       multi: <boolean>,
                       writeConcern: <document>
               }
       )
       db.user.update({'name':'josephzeng'},{$set:{'age':24}}); #example
       db.COLLECTION_NAME.updateOne(query,update); #向指定集合更新单个文档
       db.COLLECTION_NAME.updateMany(query,update); #向指定集合更新多个文档

       /*
        * document : 文档数据。
        * writeConcern :可选,抛出异常的级别。
        */
       db.collection.save(
            <document>,
            {
                 writeConcern: <document>
            }
       )

查询

 /*
  **query : 查询条件
  */
db.COLLECTION_NAME.find(
     <query>
)
db.user.find({'name':'josephzeng'}) #example

查询条件:

操作 格式 范例
等于 {<key>:<value>} db.col.find({"by":"教程"})
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}})
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}})
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}})
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}})
AND ({key1:value1, key2:value2}) db.col.find({"by":"教程", "title":"MongoDB "})
OR ({$or: [{key1: value1},{key2:value2}]}) db.col.find({$or:[{"by":"教程"},{"title": "MongoDB"}]})
// 通过name和age键来查询user中name=jiangwen并且年龄小于28的数据
db.user.find({"name":"jiangwen", "age": {$lt:28}})
//  查询名字为jiangwen并且年龄为28或性别为男性的数据
db.col.find({"name": 'jiangwen', $or: [{"age": 28},{"sex": "male"}]})

导入

 /*
 * -h,–host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
 * –port:代表远程连接的数据库的端口,默认连接的远程端口27017;
 * -u,–username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
 * -p,–password:代表连接数据库的账号对应的密码;
 * -d,–db:代表连接的数据库;(必选参数)
 * -c,–collection:代表连接数据库中的集合;(必选参数)
 * -f, –fields:代表集合中的字段,可以根据设置选择导出的字段;(必选参数)
 * –type:代表导出输出的文件类型,包括csv和json文件;
 * -o, –out:代表导出的文件名;
 * -q, –query:代表查询条件;
 * –skip:跳过指定数量的数据;
 * –limit:读取指定数量的数据记录;
 * –sort:对数据进行排序,通过参数指定排序的字段,1(升序)和-1(降序)来指定排序的方式,如 sort({KEY:1})
 */
mongoimport -d [DB_name] -c [Collection_name] -f [File_url]
./mongoimport  -d user -c goods --file test #example

索引

#创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});

#查询当前聚集集合所有索引
db.userInfo.getIndexes();

#查看总索引记录大小
db.userInfo.totalIndexSize();

#读取当前集合的所有index信息
db.users.reIndex();

#删除指定索引
db.users.dropIndex("name_1");

#删除所有索引索引
db.users.dropIndexes();

集群

#连接
./mongo 127.0.0.1:27017
use admin

#写入节点配置
cfg={ _id:"pkcms", members:[ {_id:0,host:'127.0.0.1:27017',priority:2}, {_id:1,host:'127.0.0.2:27017',priority:1},
{_id:2,host:'127.0.0.3:27017',arbiterOnly:true}] };

#让配置生效
rs.initiate(cfg)

#查看配置
rs.status()

权限

#创建超级管理员
db.createUser( {
    user: "root",
    pwd: "admin123",
    roles: [{ role: "root", db: "admin" } ]
})

#创建集群管理帐号
db.createUser({
    user: "repl",
    pwd: "repl123",
    roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
})

#创建业务帐号角色
db.createRole({
	"role" : "pktest_pri",
	"privileges" : [{"resource" : {"db" : "pktest", "collection" : ""},"actions" : ['find', 'insert','remove', 'update', 'listCollections', 'listIndexes' ,'collStats', 'dbStats', 'createIndex', 'createCollection']},
                    { resource: { cluster: true }, actions: [ 'listDatabases' ]}],
	"roles" : []
})

#创建业务帐号
db.createUser(
    {
        "user" : "pktest",
        "pwd" : "pktest",
        roles: [{ role: "pktest_pri", db: "admin" }]
      }
)

管理

#启动
sudo /etc/init.d/mongodb start
#重启
sudo /etc/init.d/mongodb restart
#停止
sudo /etc/init.d/mongodb stop

参考

First created: 2021-02-05 Fri 00:00
Last updated: 2022-11-10 Thu 23:32
Power by Emacs 27.1 (Org mode 9.4)
© 2017 – 2021 by josephzeng