mongodb-探索阶段[通俗易懂]

2022-07-19 12:28:10 浏览数 (1)

大家好,又见面了,我是全栈君。

1.数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为”db”,该数据库存储在data目录中。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

“show dbs” 命令可以显示所有数据的列表。等同于MySQL show databases;

如果你想查看所有数据库,可以使用 show dbs 命令:

db:默认的数据库名; test:表名字 insert:插入操作 find:查询操作

执行 “db” 命令可以显示当前数据库对象或集合。

2.linux 平台mongodb后台守护进程启动

Mongodb可以通过命令行方式和配置文件的方式来启动,具体命令如下:

命令行:

代码语言:javascript复制
[root@localhost mongodb]# ./bin/mongod --dbpath=/data/db 

配置文件:

代码语言:javascript复制
[root@localhost mongodb]# ./bin/mongod -f mongodb.conf  

但是这两种方式都是在前台启动Mongodb进程,如果Session窗口关闭,Mongodb进程也随之停止。不过Mongodb同时还提供了一种后台Daemon方式启动,只需要加上一个”–fork”参数即可,值得注意的是,用到了”–fork”参数就必须启用”–logpath”参数。

如下所示:

代码语言:javascript复制
[root@localhost mongodb]# ./bin/mongod --dbpath=data/db --fork  
--fork has to be used with --logpath  
[root@localhost mongodb]# ./bin/mongod --dbpath=data/db --fork --logpath=log/mongodb.log   
all output going to: /opt/mongodb/log/mongodb.log  
forked process: 3300  
[root@localhost mongodb]#   

daemon方式启动的fork参数也可以配置配置文件中,如下所示:

代码语言:javascript复制
port=27017  
dbpath=data/db  
logpath=log/mongodb.log  
logappend=true  
fork=true  

然后通过配置文件启动后mongodb也是在后台启动了:

代码语言:javascript复制
[root@localhost mongodb]# ./bin/mongod -f mongodb.conf   
all output going to: /opt/mongodb/log/mongodb.log  
forked process: 3377  

3.MongoDB数据库以服务的方式在Windows的后台运行

代码语言:javascript复制
mongod --dbpath d:mongodbdatadb --logpath d:mongodblogMongoDB.log --install --serviceName "MongoDB" 

直接加到系统服务,执行完自己就启动了,开机同样自启动

参考:windows下MongoDB的安装,配置与开机自启动 – 都市烟火 – 博客园

4.mongo.cfg 文件

代码语言:javascript复制
systemLog:
    destination: file
    path:  D:softworemongodb3datalogmongod.log
storage:
    dbPath: D:softworemongodb3datadb

5.MongoBooster 图形界面

NoSQLBooster – The Smartest GUI Tool and IDE for MongoDB

6.用show dbs查看,总是只有local一个数据库?

use newdbname ; 切换或者创建新的集合(创建时,只有插入数据后,新集合才有效)

使用命令“use 数据库名称”,只是标记你要创建新的数据库,但是实际没有任何数据写入,所以mongodb是不会真的创建数据库的;你必须在新的数据库下面写入数据,例如:

代码语言:javascript复制
db.test.insert({"key":"value"})

7.MongoDB 常用语句

代码语言:javascript复制
use DATABASE_NAME   如果数据库不存在,则创建数据库,否则切换到指定数据库。
show dbs             查看所有数据库
db.dropDatabase()    删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名
db.createCollection(name, options)  创建集合,类似数据库中的表,
db.collectionName.drop()     删除集合
show tables             # 别名, show collections  命令会更加准确点
db.COLLECTION_NAME.insert(document)  插入文档
db.COLLECTION_NAME.save(document)  插入文档,该方法新版本中已废弃,db.collection.insertOne() 或 db.collection.replaceOne() 来代替
db.collection.insertOne()       插入一条文档,3.2 版本之后新增了 
db.collection.insertMany()      插入多条文档,3.2 版本之后新增了 
update() 和 save()方法来更新集合中的文档
db.collection.remove(<query>, <justOne>)         MongoDB 删除文档
db.col.remove({})             删除所有数据,类似常规 SQL 的 truncate 命令
db.col.find().pretty()       查询文档,以易读的方式来读取数据
db.col.find({likes : {$gt : 100}})    大于操作符 - $gt
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)  limit方法,skip方法
db.COLLECTION_NAME.find().sort({KEY:1})  
db.collection.createIndex(keys, options) 创建索引
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)  聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果
mongostat 和 mongotop    监控MongoDB的运行情况
mongodump                 备份
mongorestore              恢复
explain() 和 hint()        查询分析常用函数
db.runtest.find({post_text:/runoob/i})  正则 匹配post_text中包含runoob 的文档,i 不区分大小写
代码语言:javascript复制
use 数据库名 进入数据库 若数据库不存在,创建数据库

db 显示当前数据库

show dbs 显示内容非空的数据库

db.createCollection('表名') 创建不限长度的表

db.createCollection('表名' ,{capped:true,size:1000}) 创建限制长度的表

db.表名.drop() 删除集合

show collections 显示所有表

db.表名.find() 查找表数据

db.表名.find({列名:数据1}) 按条件查询

db.表名.find({列名:数据1}).pretty() pretty() 将查带的结果格式话,更容易看清结构和内容

db.表名.findOne({列名:数据1}) 按条件查询,只返回第一条

db.表名.update({列名:数据1},{列名:数据2}) 查找到数据1 ,替换为数据2

db.表名.update({列名:数据1},{$set:{列名:数据2}}) 查找到列为数据1的,替换所有数据1为数据2

db.表名.remove({列名:数据1},{justOne:true}) 删除数据1的行,justOne为true时删除1条,为false时删除多条

比较运算符 :

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

逻辑运算符:

or或并且可以直接逗号连接in 在。。。里

排序: sort()

db.表名.find().sort({字段:参数}) 参数为1 升序 参数为-1 降序

分页 :limit()

db.表名.find().limit(参数) 参数是获取的条数

db.表名.find().skip(参数) 参数是跳过的条数

db.表名.count({列名:数据1})统计数据的条数

db.表名.find(列名:数据1).distinct('去重字段',{列名:数据2}) 除去重复

备份数据库

mongodump -h ip地址 -d 数据库名 -o存放位置

恢复数据库

mongorestore -h ip地址 -d 数据库名 -dir存放位置

8.MongoDB 聚合

代码语言:javascript复制
>db.lxwdb.aggregate([{$group:{_id:"$title",num_count:{$sum:1}}}])
{ "_id" : "mongodb_test", "num_count" : 4 }
{ "_id" : "mongodb_test123", "num_count" : 1 }
{ "_id" : "update_mongodb", "num_count" : 1 }
{ "_id" : "MongoDB 教程", "num_count" : 2 }
{ "_id" : null, "num_count" : 1 }
> db.lxwdb.find()
{ "_id" : ObjectId("613ef95fd1067f6f0d0d1aaa"), "name" : "newlxw" }
{ "_id" : ObjectId("613f0a50d1067f6f0d0d1aad"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "
mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("613f0a56d1067f6f0d0d1aae"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "
mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("613f0bb70c79827ceaac2d23"), "title" : "update_mongodb" }
{ "_id" : ObjectId("613f0f970c79827ceaac2d27"), "title" : "mongodb_test123" }
{ "_id" : ObjectId("613f0f960c79827ceaac2d26"), "title" : "mongodb_test", "age" : 4 }
{ "_id" : ObjectId("613f16540c79827ceaac2d28"), "title" : "mongodb_test", "age" : 4 }
{ "_id" : ObjectId("613f16ba0c79827ceaac2d29"), "title" : "mongodb_test", "age" : 4 }
{ "_id" : ObjectId("613f16dc0c79827ceaac2d2a"), "title" : "mongodb_test", "age" : 5 }
代码语言:javascript复制
 db.lxwdb.aggregate([{$group:{_id:"$title",num_count:{$sum:1}}}])

$group:分组统计

_id: 作为id的字段,无法改动

num_count: 统计这个分组的数目,自定义的,可以改动

通过字段 title字段对数据进行分组,并计算 title字段相同值的总和。

代码语言:javascript复制
等同于: select title, count(*) from lxwdb group by title

9.问题:Win PHP5.6 报错提示 Fatal error: Class ‘MongoClient’ not found

网上搜索到的资料,仔细看才发现两个扩展名字是不一样的。 PHP5.6需要 php_mongo.dll而不是php_mongodb.dll。下载 php_mongo.dll 安装即可。

10.PHP 调用

代码语言:javascript复制
header("Content-Type: text/html; charset=utf-8");
$m = new MongoClient(); // 连接默认主机和端口为:mongodb://localhost:27017
$db = $m->lxwdb; // 选择数据库
//$db->createCollection('runtest'); //创建集合
$collection=$db->runtest; //选择集合
$document=array(
	"title" => "MongoDB",
	"description" => "database",
	"likes" => 100,
	"url" => "http://www.runoob.com/mongodb/",
	"by", "菜鸟教程"
);
//插入文档
$res=$collection->insert($document);
echo '数据插入成功';

//查询文档
$result=$collection->find();
foreach ($result as $res){
	d($res['title']);
}

//更新文档
$collection->update(array("title"=>"MongoDB-11"),array('$set'=>array("title"=>"MongoDB-112")),array('multiple'=>true));
$result=$collection->findOne();
foreach ($result as $res){
	d($res);
}

//删除文档
$res=$collection->remove(array('0'=>false),array('justOne'=>false));
$res=$collection->remove(array('title'=>'MongoDB 教程'),array('justOne'=>true));

function d($data, $label='')
{
	$ajax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');

	if(!$ajax) echo '<pre style="text-align: left;">';
	if($label) echo $label.'--------------------------<br/>';
	print_r($data);
	if(!$ajax) echo '</pre>';
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111436.html原文链接:https://javaforall.cn

0 人点赞