如何使用MongoDB?

news2024/11/29 0:30:44

一:与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文件夹下,运行命令行

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

十一:实践

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

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

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

博客后端源码:GitHub地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/331310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux基本功之fsck命令详解

💓 大家好,我是沐风晓月,双一流院校英语计算机双专业在读; 💓 想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管是写shell脚本还是管理操作系统,最常用的命…

理解Keil编译器中编译程序时出现的Code、RO-data、RW-data和ZI-data的含义

** 1:Code、RO-data、RW-data和ZI-data ** STM32单片机在keil开发环境下编译完成后,会显示: Program Size: Codexxxx RO-dataxxxx RW-dataxxxx ZI-dataxxxx 编译后的显示窗口如图所示: 其中Code、RO-data、RW-data和ZI-data是什么意思呢&…

基于OpenCV 的车牌识别

基于OpenCV 的车牌识别 车牌识别是一种图像处理技术,用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于 OpenCV 编写 Python 代码来完成这一任务。 车牌识别的相关步骤 1. 车牌检测:第一步是从汽车上检测车牌所在位置。我们将使用…

基于matlab模拟雷达海杂波PPI

一、前言此示例演示如何在海洋环境中模拟旋转天线阵列的计划位置指示器 (PPI) 雷达图像。您将配置雷达方案和光谱海面模型,使用点散射体集合模拟扩展目标,生成返回信号,并绘制结果的 PPI 图像。二、配置雷达方案设置 R…

Word操作与应用

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.Office中Word简介 二.word工作环境 1.WPS简介 2.启动Word …

通过环境变量来绕过Windows Defender和隐藏混淆行为

什么是环境变量 关于什么是环境变量,我这篇文章介绍的很清楚 https://blog.csdn.net/qq_45894840/article/details/128622314?spm1001.2014.3001.5502这里在扩展一点 env env是英文单词environment的缩写,其功能是用于显示和定义环境变量&#xff0…

Mybatis源码(一) Mybatis是如何与spring框架整合的

Mybatis是现在最流行的数据库中间件之一,用mybatis的好处在于让开发者更专注在SQL本身,能与多种数据库兼容,而spring框架又是java最强大的框架,对于java来讲,万物是基于spring 的,因此我们有必要去理解myba…

若依框架---PageHelper分页(十三)

我们介绍了PageHelper中的cache包以及简单介绍了包中各个类的属性与方法;还介绍了Java中一种加载类的方式:Class.forName,并且通过查看com.mysql.jdbc.Driver代码,我们知道,可以通过这种方式可以执行类中的静态代码段。…

python进阶——自动驾驶寻找车道

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

设计模式-策略模式详解

1. 背景在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某…

Java数据结构中栈和队列深度解析

栈和队列使用的范围很广,本篇用来深度解析Java数据结构中的栈和队列的深度解析,栈和队列都能用单向或双向链表来实现哦,希望可以帮助各位! 文章目录 目录 一、栈 1.1栈的概念 1.2栈的使用 1.3栈的自定义顺序栈实现 1.4栈的练习题…

本机信息收集

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 : 内网安全 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远…

【JavaEE】Java中复杂的Synchronized关键字

目录 一、synchronized的特性 (1)互斥 (2)刷新内存 (3)可重入 二、synchronized的使用 (1)修饰普通方法 (2)修饰静态方法 (3)修…

计网之初识网络(理解网络传输的基本流程)

文章目录一. 网络发展史二. IP地址和端口号三. 计算机网络分层1. 什么是网络协议2. OSI七层网络模型3. TCP/IP五层网络模型4. 数据在各个层的传输过程5. 网络设备所在分层一. 网络发展史 🍂独立模式(单机模式) 我们最初的计算机是在单机模式下使用的, 此时的计算机…

遇到“独自开”,开发出属于自己一套专属系统的时代还会远吗?

目录 一、前言 二、介绍 三、详细介绍 四、总结 一、前言 哈喽,大家好,我是追,看到标题独自开时,可能此处会有疑问了。独自开?半山居士王安石的“墙角数枝梅,凌寒独自开”?哈哈,…

北京化工大学2/7寒假集训题解(>1800)

目录 A-Fence B-D again​ C-Cut the Sequence D-Parade E-trade A-Fence #include<algorithm> #include<string.h> #include<stdio.h> #include<queue> using namespace std; struct nob {int v,p;bool operator <(const nob &a)const{retu…

网络协议(四):网络分类、ISP、上网方式、公网私网、NAT

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 目录…

【沁恒WCH CH32V307V-R1开发板两路ADC读取实验】

【沁恒WCH CH32V307V-R1开发板两路ADC读取实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器&#xff0c;最高 14MHz 的输入时…

2022年这5款熟悉的软件退出了历史舞台

在过去的一年里&#xff0c;有很多新产品发布&#xff0c;当然也有很多产品与我们就此别过。这些产品曾陪伴我们的生活&#xff0c;给我们带来欢乐&#xff0c;帮助我们成长。所以本文将盘点一下在2022年和我们告别的产品。1.微软IE浏览器IE浏览器1995年8月16日正式上线&#x…

window 安装debian的Linux系统+一些环境初始化

文章目录一、安装&#xff1a;1、安装WSL22、微软商店搜索debian安装&#xff1a;3、也可以官方安装&#xff1a;二、更改镜像源1、查看debian系统版本&#xff1a;2、修改3、升级三、安装zsh1&#xff1a;检查2、安装zsh3、安装oh-my-zsh4、安装插件5、配置文件~/.zshrc:6、配…