如何使用MongoDB?

一:与MySQL区别

RDBMS 与 MongoDB 对应的术语:

类似于mysql,刚开始数据库、集合都是要创建之后才有的。

但是每次插入数据时都是插入一个对象,整个对象就是文档,对象的属性名就是字段。字段是不需在提前创建时声明的,每次插入文档时随意添加的。

这点跟mysql还是有较大差别的,mysql在创建表格时需要指定有哪些列。插入数据时也要严格根据列名顺序填写。mongodb在创建集合时不需要声明有哪些字段,插入文档时也可以随意插入对象。

二:window安装mongodb

下载地址:https://www.mongodb.com/download-center#community

下载.msi,点击安装即可,安装过程可能会很久,我两次都是安装一夜。如果安装太久中间打断好像也不影响安装。具体安装可看如下链接:

windows下MongoDB的安装及配置 - CSDN博客

总结如下:
1.安装;
2.然后建db文件夹里面放data文件夹,配置db这个文件地址;
3.建log文件夹建config文件写文件内容,配置文件地址;
4.使用mongdb(mongodb安装目录bin下双击mongo.exe)
5.双击exe文件后会弹出cmd框,在框里操作数据库就行

新版4.0的mongodb自动配置了以上内容,无需再手动配置

Mac版的默认安装目录在usr下面,默认是隐藏的。需要在全局搜索里找到,打开finder。按【command+shift+G】弹出对话框,搜索usr。usr/local/cellar/mongodb

三:linux安装Mongodb

安装/启动

1、按照这个链接的教程来 Linux 平台安装 MongoDB | 菜鸟教程

如果在执行安装语句,如下

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

提示 -bash: mongod: command not found,则到bin文件夹下执行

./mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

如果启动mongodb时报错。可参考本第八章节处理

然后到mongo文件夹下的bin文件下,执行./mongo。就可以操作数据库了

cd /usr/local/数据库文件名/bin
$ ./mongo
.....开始操作.....

2、yum安装

Centos 使用yum安装MongoDB 4.0

远程连接

Mongodb远程连接,连接前需要确认两件事:

a、防火墙是否关闭
b、配置远程连接,确认重启与配置是否成功

1、确认防火墙

ssh连接linux后,直接

systemctl status firewalld

Active: inactive (dead) 表示关闭状态

2、配置远程连接

mongodb默认只允许本地连接,远程连接需要配置。

开启服务时加上 --bind_ip_all 参数就会设置了可以远程连接,

开启前记得先干掉mongo的进程,再重新启动

查看 mongodb 进程 ps aux |grep mongodb  
删除进程 kill 进程id(进程行第一串数字)

可用netstat -nltp来检查

netstat -nltp   // 检测是否绑定ip成功

端口号为27017前面的ip是0.0.0.0而不是127.0.0.1表示正确

3、navicat登录

使用ssh方式登录,账号密码不是数据库的账号密码,是SSH的账号/密码

四:常用命令

mongo的操作命令有点像js的方法调用,具体如下

show dbs 显示所有数据库    (假如有个库叫test)
use test  使用(或创建)test数据库   
show collections 显示所有集合(表)   假如有个集合叫runoob

db.runoob.find().pretty();  读集合runoob里的所有文档(行)   db不是指某个具体的数据库名字,就是db
db.runoob.findOne('5b2cc5ee4839f91d68b4bb2f');   读取_Id 为‘xxxx’的数据
db.VisitList.find({ 'time': {'$gt': '2021/12/8', '$lt': '2021/12/9' }})    // time字段下两个时间段之间的数据

db.runoob.insert({name:'孙权'});
db.runoob.remove({'name':"孙权"})    根据属性删除某些文档,删除name字段是孙权的所有文档
db.runoob.remove({})   删除所有文档
db.runoob.remove({_id: {$in:['aID','bID']}});   //通过多个Id来删除


db.createCollection(name,options)  创建集合,options可选参数

db.runoob.update({'Title':'关于本博客'},{$set:{'CommentNum':0}});  修改数据
db.createCollection(name)   创建数据表
db.TabelName.deleteMany({"Age":50})  //TabelName数据表名 删除年龄Age字段为50岁的列

db.表名.update({},{$unset:{'字段名':''}},false, true)     // 删除字段

常用操作语句

1、排序
db.getCollection('表名').find({}).sort({字段:-1}) // 倒序

五:node操作数据库

排序的话使用sort,可以根据指定字段排序;如果只是倒序和正序的切换可以直接根据_id字段来排序。

如下为常用的node操作数据库的方法封装

// 连接数据库
var MongoClient = require("mongodb").MongoClient
   , assert = require('assert');
var Url = "mongodb://localhost:27017/"; 

/**
 * 操作数据库 比较全面的封装
 * @param Collection 要操作的表名
 * @param Type 要操作的类型,比如增删改查直接操作库
 * @param data 如果是只有一个参数,则直接传递该参数;如果有两个参数,传递数组
 * @param CallBack 操作成功的回调函数
 * @constructor
 */
function Mongo(Collection,Type, data, CallBack) {
  MongoClient.connect(Url, function (err, db) {
    var DB = db.db("snake");
    if (Type == 'Insert') {
      DB.collection(Collection).insertOne(data, function (err, res) {
        if(err) throw err;
        db.close();
        CallBack(res);
      });
    } else if (Type == 'Delete') {
      DB.collection(Collection).deleteOne(data,function (err,res) {
        if(err) throw err;
        db.close();
        CallBack(res);
      });
    } else if (Type == 'Read') {
      DB.collection(Collection).find(data).toArray(function (err, res) {
        if(err) throw err;
        db.close();
        CallBack(res);
      });
    } else if(Type == 'Update'){
      DB.collection(Collection).updateOne(data[0],data[1],function (err,res) {
        if(err) throw  err;
        db.close();
        CallBack(res);
      })
      // 获取列表数量
    }else if(Type == 'GetNum'){
      DB.collection(Collection).find(data).toArray(function (err, res) {
        if(err) throw err;
        db.close();
        CallBack(res.length);
      });
      // 获取排序后的列表
    }else if(Type == 'ReadByOrder'){
      if(data[2]){
        DB.collection(Collection).find(data[0]).sort(data[1]).skip(data[2].Skip).limit(data[2].Limit).toArray(function (err, res) {
          if(err) throw err;
          db.close();
          CallBack(res);
        });
      }else {
        DB.collection(Collection).find(data[0]).sort(data[1]).toArray(function (err, res) {
          if(err) throw err;
          db.close();
          CallBack(res);
        });
      }
    }else if(Type == 'MulDelete'){
      DB.collection(Collection).remove(data,function (err,res) {
        if(err) throw err;
        db.close();
        CallBack(res);
      });
    }
  });
}

使用上面的方法:

// 获取排序后的,根据分页数据请求的列表
var PagnationData = Para.PagnationData ? Para.PagnationData : {SKip: 0, Limit: 1000};
Monge.Mongo('score', 'ReadByOrder', [{}, {_id: -1}, PagnationData], function (Result) {
      var Json = {status: '0', data: Result};
      Response.json(Json);
});

// 单个删除
var Object = {};
    Object._id = ObjectId(Para._id);

Monge.Mongo('score', 'Delete', Object, function () {
    var Json = {status: '0', data: '标签删除成功'};
    Response.json(Json);
});

// 批量删除
var Object = {};
Para.idArray.forEach(function (item,i) {    // Para.idArray为接收的参数,是个存的id的数组
  Para.idArray[i] = ObjectId(item);    //
});
Object._id = {
  $in: Para.idArray
};

Monge.Mongo('score', 'MulDelete', Object, function () {
  var Json = {status: '0', data: '批量删除成功'};
  Response.json(Json);
});

六:导出mongodb数据库

主要以下三点:

1.一次只能导出一个集合,且必须选择一个集合

2.集合中具体的字段可以不写

3.必须在bin文件夹下,运行命令行。如果正在使用mongo命令需要退出

mongoexport -d test -c runoob -o C:\Mongodb\runoob.json --type json

导入比较简单,如下:

mongoimport -d test -c Users --file C:\dbs\runoob.json

macos下,导出集合

mongoexport -d test -c Tags -o /Users/sunquan/Mongodb/Tags.json --type json

七:Mongodb数据导出成Excel

Mongodb原生支持导出数据为csv文件,excel可以直接打开该文件。如果一定需要用excel格式的文件,可以建一个excel文件,然后把csv文件中的数据拷贝进去。

在Mongdb的安装目录下的bin文件夹中执行语句:

mongoexport -d 库名 -c 表名 -f 字段1,字段2 --csv -o 路径及文件名

举个栗子:

C:\Program Files\MongoDB\Server\4.0\bin>
mongoexport -d onlyfudai -c Form -f UserName,UserPhone,
GiftArray,IdentCode --csv -o ./user.csv

八:可视化工具

因为之前使用mysql时,用的navicat数据库可视化工具。于是惯性思维就用navicat链接操作mongodb,navicat确实非常方便,怎奈我没钱买正版。破解的办法,动不动就失效。。。

后来发现有专门为mongodb打造的可视化工具:Robo 3T。免费,方便,功能强大,推荐给大家避免走我的弯路。具体长下面这个样子

九:注意事项

1、查询时间范围时时间格式需要规范

db.VisitList.find({'time':{'$gt':'2021/12/07','$lt':'2021/12/09'}})// time字段下两个时间段之间的数据

如果两个时间格式误写为:(2021/12/7 到2021/12/9)或者(2021/12/9 到2021/12/10)是会查询不到记录的,注意月日都是两位。

十:具体问题

1、/lib64/libc.so.6: version `GLIBC_2.18' not found

在使用 MongDB,GLIBC_2.18 缺失,按照如下命令执行,途中不要退出.

curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz 
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
make install

十一:当找不到安装目录

最近需要导出mongodb的数据,打开Robo 3T才发现原来,这个可视化工具不具备这个功能。于是准备使用mongo的自带shell用命令导出。

我以往都是找到安装路径下的mongodb执行文件,然后使用原生shell。然后发现由于太久未用原生shell,我死活找不到安装路径了。大概是mongodb的文件名字被我改过,所以搜不到。

3天后才反应过来,何必一定要找到安装路径呐。直接搜到执行文件的路径,直接执行命令就行了。具体如下

which mongo

找到该路径,在该路径下,直接执行mongo命令即可

十二:实践

我自己写了一个博客,后端语言用的Node.js,数据库搭配使用Mongodb。

后端接口有关于mongodb的操作封装,分享给大家,欢迎大家指正

博客前端展示:孙权的个人网站

博客后端源码:GitHub地址

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安装和配置MongoDB可以按照以下步骤进行: 1. 下载MongoDB:首先,你需要从MongoDB官方网站(https://www.mongodb.com/try/download/community)下载适合你操作系统的MongoDB安装包。 2. 安装MongoDB:下载完成后,运行安装包并按照提示进行安装。在安装过程中,你可以选择自定义安装路径和其他选项。 3. 配置环境变量:安装完成后,需要将MongoDB的可执行文件路径添加到系统的环境变量中。具体步骤如下: - 打开系统的环境变量设置(Windows:控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量;Linux/Mac:打开终端并编辑`~/.bashrc`或`~/.bash_profile`文件)。 - 在系统变量中找到`Path`变量,并点击编辑。 - 将MongoDB的可执行文件路径添加到`Path`变量中,例如:`C:\Program Files\MongoDB\Server\4.4\bin`(Windows)或`/usr/local/mongodb/bin`(Linux/Mac)。 - 保存并关闭环境变量设置。 4. 创建数据目录:在安装MongoDB之前,需要创建一个用于存储数据的目录。可以选择任意位置作为数据目录,例如:`C:\data\db`(Windows)或`/data/db`(Linux/Mac)。 5. 启动MongoDB:打开终端或命令提示符,输入以下命令启动MongoDB服务: ``` mongod ``` 如果你使用了自定义的数据目录,可以通过`--dbpath`参数指定数据目录的路径,例如: ``` mongod --dbpath /path/to/data/directory ``` 6. 连接MongoDB:在另一个终端或命令提示符中,输入以下命令连接到MongoDB服务: ``` mongo ``` 至此,你已经成功安装和配置了MongoDB。你可以使用MongoDB提供的命令行工具或者编程语言的驱动程序来操作和管理MongoDB数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun_qqq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值