mongodb-探索阶段
1.数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。等同于MySQL show databases;
如果你想查看所有数据库,可以使用 show dbs 命令:
db:默认的数据库名; test:表名字 insert:插入操作 find:查询操作
执行 "db" 命令可以显示当前数据库对象或集合。
2.linux 平台mongodb后台守护进程启动
Mongodb可以通过命令行方式和配置文件的方式来启动,具体命令如下:
命令行:
[root@localhost mongodb]# ./bin/mongod --dbpath=/data/db
配置文件:
[root@localhost mongodb]# ./bin/mongod -f mongodb.conf
但是这两种方式都是在前台启动Mongodb进程,如果Session窗口关闭,Mongodb进程也随之停止。不过Mongodb同时还提供了一种后台Daemon方式启动,只需要加上一个"--fork"参数即可,值得注意的是,用到了"--fork"参数就必须启用"--logpath"参数。
如下所示:
[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参数也可以配置配置文件中,如下所示:
port=27017
dbpath=data/db
logpath=log/mongodb.log
logappend=true
fork=true
然后通过配置文件启动后mongodb也是在后台启动了:
[root@localhost mongodb]# ./bin/mongod -f mongodb.conf
all output going to: /opt/mongodb/log/mongodb.log
forked process: 3377
3.MongoDB数据库以服务的方式在Windows的后台运行
mongod --dbpath d:\mongodb\data\db --logpath d:\mongodb\log\MongoDB.log --install --serviceName "MongoDB"
直接加到系统服务,执行完自己就启动了,开机同样自启动
参考:windows下MongoDB的安装,配置与开机自启动 - 都市烟火 - 博客园
4.mongo.cfg 文件
systemLog:
destination: file
path: D:\softwore\mongodb3\data\log\mongod.log
storage:
dbPath: D:\softwore\mongodb3\data\db
5.MongoBooster 图形界面
NoSQLBooster - The Smartest GUI Tool and IDE for MongoDB
6.用show dbs查看,总是只有local一个数据库?
use newdbname ; 切换或者创建新的集合(创建时,只有插入数据后,新集合才有效)
使用命令“use 数据库名称”,只是标记你要创建新的数据库,但是实际没有任何数据写入,所以mongodb是不会真的创建数据库的;你必须在新的数据库下面写入数据,例如:
db.test.insert({"key":"value"})
7.MongoDB 常用语句
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 不区分大小写
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 聚合
>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 }
db.lxwdb.aggregate([{$group:{_id:"$title",num_count:{$sum:1}}}])
$group:分组统计
_id: 作为id的字段,无法改动
num_count: 统计这个分组的数目,自定义的,可以改动
通过字段 title字段对数据进行分组,并计算 title字段相同值的总和。
等同于: 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 调用
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>';
}
赞赏码
非学,无以致疑;非问,无以广识