码迷,mamicode.com
首页 > 数据库 > 详细

Mongodb数据库的搭建和相关使用命令

时间:2020-10-08 18:53:53      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:简单例子   辅助   eset   用法   问题   fork   例子   解压   lte   

Mongodb数据库的安装

第一步:下载mongodb安装包:
MongoDB官方下载地址:http://www.mongodb.org/downloads
第二步:解压压缩包
将安装包在/usr/local目录下解压缩:
tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz

技术图片

技术图片

第三步:安装准备
将mongodb解压后的文件夹重命名:
[root@192 local]# mv mongodb-linux-x86_64-rhel62-3.4.2 mongodb
技术图片
然后在/usr/local/mongodb创建数据目录 data和日志文件dblogs:
[root@192 mongodb]# mkdir -p data
[root@192 mongodb]# touch dblogs
技术图片
第四步:加入开机启动
将mongodb启动项目加入/etc/rc.local,保证mongodb在服务器开机时启动。
#echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --fork">>/etc/rc.local

技术图片

第五步:测试启动和关闭mongodb
启动:

./mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs –fork

技术图片

技术图片

进入mongodb数据库:
[root@192 bin]# ./mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-10-07T00:36:09.311+0800 I STORAGE [initandlisten]
2020-10-07T00:36:09.311+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTi
ger storage engine

技术图片

技术图片

关闭:
[root@192 bin]# killall mongod
[root@192 bin]# pstree -p |grep mongod
[root@192 bin]# ps -ef |grep mongod
root 4071 3812 0 00:35 pts/1 00:00:00 grep mongod
技术图片

查看进程列表:
pstree -p |grep mongod 可以看到主进程和子进程

关闭 pkill mongod 或kill all,不要用kill -9 PID (在老版本的mongodb会形成一个锁文件,会导致不能再启动,3.4中没有发现该问题)

查看mongodb端口号 netstat -tunlp|grep :27017(默认27017)

退出:exit 或 ctrl+c

简单的测试命令:
show dbs 查看有多少个数据库
db 查看当前数据库
查看当前数据库有多少个集合:show tables 或show collections
插入数据:

db.c1.insert({name:"zhoukou"});
WriteResult({ "nInserted" : 1 })
show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
db
test
发现多了一个test数据库,当前数据库为test数据库

查看数据:

db.henan.find()
{ "_id" : ObjectId("5f7ca03732e269d0198e0770"), "name" : "zhouk
ou" }
发现henan集合里多了一个json对象,有两个字段,第一个是name,值为zhoukou;ObjectId是随机形成的,由计算机机器号+进程号和时间等编号、当前命名空间里的编号组成,所以即使将多个集合中的数据合并,也不会冲突。因为不同的集合里ObjectId是不会重复的。

常用的mongodb数据库命令:

不带任何符号的命令在 Linux的shell或者windows的cmd环境运行。
带有>符号的命令在MongoDB的客户端 mongo shell中运行。

mongodb数据库常用命令
1)查看命令提示

db.help();

2)切换/创建数据库

use mydb;如果数据库不存在,则创建数据库,否则切换到指定数据库。
db
mydb
3)查询所有数据库
show dbs;

4)删除当前使用数据库

db.dropDatabase();

5)从指定主机上克隆数据库

db.cloneDatabase("192.168.199.9");

6)从指定的机器上复制指定数据库数据到某个数据库

db.copyDatabase("mydb", "temp", "192.168.199.9");

7)修复当前数据库

db.repairDatabase();

8)查看当前使用的数据库

db.getName();
或者
db;

9)显示当前db状态

db.stats();
{
"db" : "test",
"collections" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"numExtents" : 0,
"indexes" : 0,
"indexSize" : 0,
"fileSize" : 0,
"ok" : 1
}

10)当前db版本

db.version();

11)查看当前db的链接机器地址

db.getMongo();

12)查询之前的错误信息

db.getPrevError();

13)清除错误记录

db.resetError();

集合相关命令:
1) 创建一个集合

db.createCollection("mycoll");

或者带参数创建固定集合

db.createCollection("log", {size: 20, capped:true, max: 100});

2) 显示当前数据库中的集合

show collections;

或者

db.getCollectionNames();

3) 使用集合

db.mycoll

或者

db.getCollection("mycoll")

4)查看集合命令帮助文档

db.mycoll.help();

5)查询当前集合的数据条数

db.mycoll.count();

6)查看集合数据大小

db.mycoll.dataSize();

7)查看集合索引大小

db.mycoll.totalIndexSize();

8)为集合分配的空间大小,包括未使用的空间

db.mycoll.storageSize();

9)显示集合总大小,包括索引和数据的大小和分配空间的大小

db.mycoll.totalSize();

10)显示当前集合所在的db

db.mycoll.getDB();

11)显示当前集合的状态

db.mycoll.stats();

12)集合的分片版本信息

db.mycoll.getShardVersion();

13)集合重命名

db.mycoll.renameCollection("users");

或者

db.getCollection("mycoll").renameCollection("users");

将mycoll重命名为users,集合名为纯数字时只能使用db.getCollection("mycoll").renameCollection这种方式。

14) 显示当前db所有集合的状态信息

db.printCollectionStats();

15)删除当前集合

db.mycoll.drop();

文档相关命令:

1)写入文档

db.user.insert({"name":"joe"});

或者

db.user.save({"name":"joe"});

2)查看文档

db.user.find();

3)更新文档

db.user.save({"_id" : ObjectId("579036a9de4344710224234d"), "myName" : "joe", "age" : 20})

update()使用示例:

db.user.update({"myName" : "joe"},{$set:{"age" : 20,"company": "google"}},true,{multi:true},WriteConcern.SAFE);

db.user.update({"myName" : "joe"},{$set:{"age" : 20,"company": "google"}},true,true,WriteConcern.SAFE);

db.user.update({"myName" : "joe"},{$set:{"age" : 20,"company": "google"}},true,WriteConcern.SAFE);

db.user.update({"myName" : "joe"},{$set:{"age" : 20,"company": "google"}},{multi:1});

4)删除文档

使用示例:

db.user.remove({"myName" : "joe"},1);
db.user.remove({"myName" : "joe"});

5)更新文档并返回文档

db.user.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: ‘a2‘}, $inc: {age: 2}}
});
或者
db.runCommand({ findandmodify : "user",
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: ‘a2‘}, $inc: {age: 2}}
});

6) 删除文档并返回文档

db.user.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
remove: true
});
或者
db.runCommand({ findandmodify : "user",
query: {age: {$gte: 25}},
sort: {age: -1},
remove: true
});

7)查询满足条件的文档数量

db.user.count({$or: [{age: 14}, {age: 28}]});

索引相关命令:

1) 创建索引

db.user.ensureIndex({age: 1});
db.user.ensureIndex({myName: 1, age: -1});

例如我们有数据:
{"myName":"joe",age:14}
{"myName":"ad",age:14}
{"myName":"ad",age:38}
{"myName":"ad",age:24}
{"myName":"ab",age:14}
使用db.user.ensureIndex({myName: 1, age: -1})建议索引后,索引中的数据组织为:
{"myName":"ab",age:14}
{"myName":"ad",age:38}
{"myName":"ad",age:24}
{"myName":"ad",age:14}
{"myName":"joe",age:14}

创建索引还可以搭配一些参数:

db.test.ensureIndex({"username":1},{"background":true})

db.test.ensureIndex({"userid":1},{"unique":true})

db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})

db.test.ensureIndex({"userid":1},{"unique":true,"sparse":true})

2) 查询集合所有索引

db.user.getIndexes();

3) 查看集合总索引记录大小

db.user.totalIndexSize();

4) 读取当前集合的所有index信息

db.user.reIndex();

5) 删除指定索引

db.user.dropIndex("myName");

6) 删除集合所有索引

db.user.dropIndexes();

基本查询命令

find简介

db.user.find();

如果需要结构化显示返回的文档可以加上pretty()方法,如下:

db.user.find().pretty();

括号中可以设置两个个参数,以逗号分隔识别

db.user.find({"myName":"joe"},{"age":1})

游标
游标一般用于遍历数据集。通过hasNext()判断是否有下一条数据,next()获取下一条数据。
例如:

var cursor= db.user.find();
while(cursor.hasNext()){
var temp=cursor.next()
print(temp.myName);
}
游标还实现了迭代器接口,所以可以使用forEach。
var cursor= db.user.find();
cursor.forEach(function(temp){
print(temp.myName);
});

条件查询:

与操作

db.user.find({"myName":"joe","age":16})

或操作$or

db.user.find({$or: [{age: 14}, {age: 28}]});

大于$gt

db.user.find({age: {$gt: 20}})

小于$lt

db.user.find({age: {$lt: 20}})

大于等于$gte

db.user.find({age: {$gte: 20}})

小于等于$lte

db.user.find({age: {$lte: 20}})

类型查询$type

使用方式如下:

db.user.find( { "myName" : { $type : 2 } } );
db.user.find( { "myName" : { $type : "string" } } );

是否存在$exists

db.user.find({"age": {$exists: true}})

取模$mod

db.user.find({"age": {$mod : [10, 0]}});

不等于$ne

db.user.find({ "age" : { "$ne" : 23}})

包含$in

db.user.find({ "myName" : { "$in" : [ "joe" , "ab"]}})

不包含$nin

db.user.find({ "myName" : { "$nin" : [ "joe" , "ab"]}})

$not: 反匹配
以上所有字段查询操作都能取非,比如:

db.user.find({ "myName" : { "$in" : [ "joe" , "ab"]}})
db.user.find({ "myName" : {$not:{ "$in" : [ "joe" , "ab"]}}})

特定类型查询

1 null

db.user.find({"company":null})
查询company字段为null的文档。
db.user.find({"company":{$nin:[null]} })
查询company字段不为空的文档。

  1. MongoDB中的正则用法
    MongoDB使用//表示启用正则表达式,如下:

    db.user.find({"name":/^j/})

3 嵌套文档
BSON格式的文档是可以相互嵌套的,例如如下文档phone字段的值就是一个子文档:
{
"name" : "huangz",
"phone" : { "home" : 123321,
"mobile" : 15820123123}
}

3.1 精确匹配查询
指定完整的文档,查询出子文档完全匹配指定文档的文档。

db.user.find({"phone":{"home" : 123321,"mobile" : 15820123123}})

3.2 点查询
如果我们不知道子文档的完整文档,只知道子文档中一个字段的值,可以通过点查询。

db.user.find({"phone.home":123321})

4数组

4.1 数组单元素查询

db.user.find({favorite_number:6});

4.2 $all数组多元素查询

db.user.find({favorite_number : {$all : [6, 8]}});

4.3 $size数组长度查询

db.user.find({favorite_number: {$size: 3}});

4.4 $slice返回数组子集

db.user.find({},{favorite_number: {$slice: 2}});
db.user.find({},{favorite_number: {$slice: -2}});

4.5 精确匹配查询

db.user.find({favorite_number :[6, 8]});

4.6点查询
点查询用于查询更复杂的数组,例如数组中包含的是子文档的情况:
{
"name" : "joe",
"phone" :[ { "home" : 123321,
"mobile" : 1854046352},
{ "home" : 123652,
"mobile" : 15820123123} ,
{ "home" : 123456,
"mobile" : 13820123123}
]
}
需要查询phone数组中子文档的home值为123456的文档,使用命令:

db.user.find({"phone.home":123456});

4.7索引查询
数组都有索引,例如[6,8],6是第0个元素,8是第1个元素(数组索引以0开头)。要查找某个元素指定值的文档可以使用点和索引值:

db.user.find({"favorite_number.0":6});

点查询中只要数组的子文档里有一个home值满足查询值就会返回文档。如果我们要精确到第几个元素也可以用索引查询。

db.user.find({"phone.2.home":123456});

4.8 元素查询$elemMatch

数组的子文档如果有多个字段,查询出子文档同时满足两个条件的文档有两种方式:

db.user.find({"phone.home":123456,"phone.mobile":13820123123});
或者
db.user.find( {
phone: {
$elemMatch: {
home :123456,
mobile: 13820123123
}
}
} )

高级查询$where

Javascript编程简单例子

db.user.find().forEach(function(item){
if(item.age>18){
item.tag="adult";
}
db.user.save(item);
})

Javascript与$where结合使用

db.user.find({age: {$gt: 18}});

或者

db.user.find({$where: "this.age > 18"});

或者

db.user.find("this.age > 18");
或者
f = function() {return this.age > 18}; db.user.find(f);

查询辅助

1 条数限制limit

db.user.find().limit(2);

2 起始位置skip

db.user.find().skip(3).limit(5);

3 排序sort

db.user.find().sort({age: 1});

db.user.find().sort({age: -1});

Mongodb数据库的搭建和相关使用命令

标签:简单例子   辅助   eset   用法   问题   fork   例子   解压   lte   

原文地址:https://blog.51cto.com/9285090/2540230

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!