mongoDB

创建新用户

db.createUser(
  {
    user: "yingbo",
    pwd: "",
    roles: [ { role: "dbAdmin", db: "yingbo" },{ role: 'readWrite', db: "yingbo"} ]
  }
)

db.createUser(
  {
    user: "admin",
    pwd: "",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

log目录 /var/log/mongodb/mongod.log

db目录 /var/lib/mongo

配置文件 /etc/mongod.conf

启动/重启/停止 sudo service mongod start/restart/stop

开启用户认证 conf 文件加

security:
  authorization: enabled

登录

//方法一
mongo --port 12236 -u "admin" -p "" --authenticationDatabase "admin"
//方法二
db.auth("yingbo", "")

显示所有数据库

show dbs

删库

use <dbname>
db.dropDatabase()

显示所有集合

show tables 或者 show collections

创建集合

//正常情况下直接插入数据就可以自动新建一个集合

//创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("<collectionName>", { capped : true, autoIndexId : true, size : 
   6142800, max : 10000 } )

//单纯的新建一个集合
db.createCollection("<collectionName>")

删除集合

db.<collectionName>.drop()

db.<collectionName>.insert(<object>)

db.<collectionName>.remove({key:value}) find里边可以为{}删除全部

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

db.<collectionName>.find({key:value}) find里边可以没有参数

//格式化显示
db.col.find().pretty()

//条件语句
db.col.find({likes : {$lt :200, $gt : 100}}).pretty() //限制 100<likes<200

$lt:小于
$lte:小于或等于
$gt:大于
$gte:大于或等于
$ne: 不等于

$type: 
    Double     1      
    String     2      
    Object     3      
    Array     4      
    Binary data     5      
    Undefined     6     已废弃。
    Object id     7      
    Boolean     8      
    Date     9      
    Null     10      
    Regular Expression     11      
    JavaScript     13      
    Symbol     14      
    JavaScript (with scope)     15      
    32-bit integer     16      
    Timestamp     17      
    64-bit integer     18      
    Min key     255     Query with -1.
    Max key     127

//AND
db.col.find({key1:value1, key2:value2}).pretty()

//OR
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

//AND+OR
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

// 排除某个字段,例如_id
db.col.find({},{"_id": 0})

// 指定返回某几个字段
db.col.find({},{"name": 1, "sex": 1})

Limit与Skip方法

db.<collectionName>.find().limit(<number1>).skip(<number2>)

number1 : 本次查询最多显示条数

number2 : 本次查询跳过的条数


sort() 方法

db.<collectionName>.find().sort({<key>:<number>})

key : 需要进行排序的键名

number : 其中 1 为升序排列,而 -1 是用于降序排列


createIndex() 方法

db.values.createIndex({<key>: <number>, <key>: <number>}, {background: true})

key : 需要进行排序的键名

number : 其中 1 为升序排列,而 -1 是用于降序排列

建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。


aggregate() 方法

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "runoob.com",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}

$sum 计算总和。 db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : “$likes”}}}])

$avg 计算平均值 db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$avg : “$likes”}}}])

$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$min : “$likes”}}}])

$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id :
“$by_user”, num_tutorial : {$max : “$likes”}}}])

$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : “$by_user”, url : {$push: “$url”}}}])

$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : “$by_user”, url : {$addToSet : “$url”}}}])

$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : “$by_user”, first_url : {$first : “$url”}}}])

$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : “$by_user”, last_url : {$last : “$url”}}}])

管道

$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

结果中就只还有_id,tilte和author三个字段
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

连id一起删除
db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

db.articles.aggregate( [
  { $match : { score : { $gt : 70, $lte : 90 } } },
  { $group: { _id: null, count: { $sum: 1 } } }
] );

$limit:用来限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

db.article.aggregate(
    { $skip : 5 });

$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group:将集合中的文档分组,可用于统计结果。

$sort:将输入文档排序后输出。

$geoNear:输出接近某一地理位置的有序文档。


MongoDB 复制(副本集)

等树莓派装完再看

MongoDB 分片

等树莓派装完再看

备份

mongodump -h dbhost -d dbname -o dbdirectory

-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例,例如:test

-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

恢复

mongorestore -h <hostname><:port> -d dbname <path>

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017

--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

<path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。

--dir:
指定备份的目录

你不能同时指定 <path> 和 --dir 选项。


数据库   mongoDB      数据库 mongoDB

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!