MongoDB使用记录

安装MongoDB(Mac环境)

本次安装没有使用brew,而是直接从官网下载的方式,官网下载地址如下:
https://www.mongodb.com/download-center/community
记得页面中间的选项栏要选到Server

下载页面

选择合适的版本、系统和安装包格式之后,直接Download即可,安装包下载好之后

# 解压安装包
tar -zxvf mongodb-macos-x86_64-4.2.0.tgz
# 对安装目录进行重命名
mv mongodb-macos-x86_64-4.2.0/ mongodb
# 将安装目录复制到"/usr/local/"目录下
cp -R mongodb /usr/local/

# 修改环境配置文件(以".bash_profile"为例),并使其生效
vim .bash_profile
export PATH=${PATH}:/usr/local/MongoDB/bin
source .bash_profile

# 接着需要手动创建一个目录"/data/db",并修改该目录的权限,该目录用于放置数据库内容
sudo mkdir -p /data/db
sudo chmod -R 777 /data/db

到此,MongoDB就安装好了,接下来我们可以执行以下操作

# 启动MongoDB的服务(默认方式)
mongod
# 启动MongoDB的服务(指定方式,适用于自定义目录和端口的情况,不加则使用默认配置)
# 默认的数据库目录为“/data/db”,默认端口为27017
mongod --dbpath 目标地址绝对路径 --port 端口号
# 打开终端模式
mongo

MongoDB基础知识

数据库:用于存放集合的仓库
集合:类似于数组,内部可以存放若干个文档
文档:MongoDB中的最小单位,常用的操作都对其执行,每个文档默认存在一个名为“_id”的属性,在不特意设置的情况下,该属性值的格式为:ObjectId("xxxxxxxxxxxxx")

在MongoDB中,数据库和集合无需手动创建,我们可以直接进入和使用,当有文档生成的时候会自动创建对应的数据库和集合。

MongoDB常用指令如下:

# 查看所有的数据库,两种方式结果一致
show dbs
show databases

# 进入指定数据库
use 数据库名

# 查看当前使用的数据库名
db

# 查看当前库中存在的所有集合
show collections

# --------------------------------------------------------------------------------

# 在指定集合中插入一个文档
db.集合名.insert({name: "zhangsan",age: 18});

# 在指定集合中插入多个文档,小括号内部先是加上数组的[],内部再是若干个JSON对象
db.集合名.insert( [ {name: "lisi",age: 20}, {name: "wangwu",age: 24}, ... ] );

# --------------------------------------------------------------------------------

# 删除指定集合
db.集合名.drop();

# 删除指定集合下所有的文档对象,记得必须加上 {}
db.集合名.remove({});

# 删除指定集合下满足条件的所有文档对象
db.集合名.remove(JSON对象条件);

# 删除指定集合下满足条件的第一个文档对象
db.集合名.remove(JSON对象条件, true);

# --------------------------------------------------------------------------------

# 覆盖指定集合下满足条件的第一个文档对象
db.集合名.update(原JSON对象条件, 新JSON对象全属性);

# 新增/局部修改指定集合下满足条件的第一个文档属性
db.集合名.update(原JSON对象条件, {$set: {该JSON对象需要更新/新增的键值对}});

# 删除指定集合下满足条件的第一个文档属性
db.集合名.update(原JSON对象条件, {$unset: {需要删除的属性名:1}});

# 新增/局部修改指定集合下满足条件的所有文档属性
db.集合名.update(原JSON对象条件, {$set: {该JSON对象需要更新/新增的键值对}}, {multi: true});
db.集合名.updateMany(原JSON对象条件, {$set: {该JSON对象需要更新/新增的键值对}});

# 向指定单个数组文档中添加一个属性值,若有嵌套则属性名必须加双引号
db.集合名.update(原JSON对象条件, {$push: {需新增的键值对}});

# 向指定单个数组文档中添加一个属性值,若已存在该属性值则不会变更
db.集合名.update(原JSON对象条件, {$addToSet: {需新增的键值对}});

# 增加指定文档中原有属性值的数值,即在原有基础上进行运算
db.集合名.update(原JSON对象条件, {$inc: {属性名: 增长值}});

# --------------------------------------------------------------------------------

# 查询当前集合下的所有文档对象,默认按照“_id”的顺序升序排序
db.集合名.find();

# 查询指定集合下满足条件的文档,比如查找所有年龄为18的文档对象
# 该方法返回值为一个数组,可以在语句后方加上"[索引]"来获取特定的文档
db.集合名.find({age: 18});

# 查询指定集合下满足条件的嵌套文档,比如查找所有用户中等级为6级的文档对象
# 注意在使用嵌套语句时,条件属性名必须加上双引号
db.集合名.find({"user.level": 6 });

# 查询指定集合下满足运算条件的文档,比如查找年龄18到24的文档对象,多个条件用逗号分隔
# 运算符:1.大于:$gt  2.小于:$lt  3.大于等于:$gte  4.小于等于:$lte  5.不等于:$ne
db.集合名.find({age: {$gt: 18, $lt: 24}});

# 查询指定集合下满足运算条件的文档,比如查找年龄小于18或大于24的文档对象
# 运算符:1.或:$or
db.集合名.find({$or:[ {age: {$lt: 18}}, {age: {$gt: 24}} ]});

# 查询指定集合下满足条件的第一个文档,比如查找第一个名为lisi的文档对象
db.集合名.findOne({name: "lisi"});



# 查看指定集合下文档的总数量
db.集合名.find().count();

# 查看指定集合下所有的文档,并按照后续属性排序
# 其中“1”代表升序,“-1”代表逆序;多个排序属性区分先后顺序
db.集合名.find().sort({排序属性名一: 1}, {排序属性名二: -1});

# 对查询结果数量进行过滤,若不写skip则默认从开头显示,即 skip(0)
db.集合名.find().skip(跳过数量).limit(显示数量);

# 对查询结果字段进行过滤,例如只想显示username
# 其中“_id”默认显示,参数中1代表显示,0代表不显示
db.集合名.find({}, {username: 1, _id: 0});

# --------------------------------------------------------------------------------

# 在MongoDB中,支持for循环操作
for(var i=0; i<100; i++){
    db.集合名.操作名(...);
}

Spring Data MongoDB

Spring Data MongoDB是由SpringData提供的与MongoDB文档数据库集成的依赖模块。 Spring Data MongoDB的关键功能区域是一个以POJO为中心的模型,该模型用于与MongoDB DBCollection进行交互并轻松编写存储库样式的数据访问层。

导入相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

接着可以在项目的配置文件application.yml中加入MongoDB的相关配置

spring:
    data:
        mongodb:
            host: 127.0.0.1      #主机名
            database: demo_db    #数据库名称
            port: 27017          #端口

接下来需要创建一个实体类,示例如下:

@Data
@Document(collection = "your_collection_name")
public class User {
    @Id
    private String id;
    private String username;
    private String password;
}

实体类创建好之后,就需要有一个Repository类,该类需要继承MongoRepository类,内部已经封装好一些常用的方法,示例如下:

@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

到此,我们就可以在业务层添加UserRepository对象,来完成对应的操作

@Service
public class UserService {
 
    @Autowired
    private UserRepository userRepository;

    public void saveUser(User user) {
        this.userRepository.save(user);
    }
}

关于UserRepository的具体操作方法规范可以参考Spring Data JPA官方规范,网址如下:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#reference

JPA方法规范

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容