MongoDB【MongoDB应用实战】(四)-全面详解(学习总结---从入门到深化)

news2024/11/26 0:54:58

 

 

目录

MongoDB应用实战


多键索引

多键索引用于为数组中的元素创建索引

 先创建集合inventory,使用下面的数据来创建多键索引

[{ _id: 5, type: "food", item: "aaa", ratings:[ 5, 8, 9 ] },
{ _id: 6, type: "food", item: "bbb", ratings: [ 5, 9 ] },
{ _id: 7, type: "food", item: "ccc", ratings: [ 9, 5, 8 ] },
{ _id: 8, type: "food", item: "ddd", ratings: [ 9, 5 ] },
{ _id: 9, type: "food", item: "eee", ratings: [ 5, 9, 5 ] }]
db.inventory.createIndex( { ratings: 1 } )

MongoDB使用多键索引查找在“ratings”数组中有“5”的文档,然 后,MongoDB检索这些文档并筛选“ratings”数组等于查询数组 “[5,9]”的文档。

db.inventory.find( { ratings: [ 5, 9 ] } )

地理空间索引

针对地理空间坐标数据创建索引。2dsphere索引用于存储和查找球 面上的点,2d索引用于存储和查找平面上的点。

db.company.insert(
 {
  loc : { type: "Point", coordinates: [ 116.502451, 40.014176 ] },
  name: "军博地铁",
  category : "Parks"
 }
)
db.company.createIndex( { loc : "2dsphere" } )
db.company.find({
"loc" : {
   "$geoWithin" : {
    "$center":[[116.482451,39.914176],0.05]
   }
 }
})
db.places.insert({"name":"aa","addr":[32,32]})
db.places.insert({"name":"bb","addr":[30,22]})
db.places.insert({"name":"cc","addr":[28,21]})
db.places.insert({"name":"dd","addr":[34,26]})
db.places.insert({"name":"ee","addr":[34,27]})
db.places.insert({"name":"ff","addr":[39,28]})
db.places.find({})
db.places.createIndex({"addr":"2d"})
db.places.find({"addr":{"$within":{"$box": [[0,0],[30,30]]}}})

全文索引

MongoDB提供了针对string内容的文本查询,Text Index支持任意 属性值为string或string数组元素的索引查询。注意:一个集合仅支 持最多一个Text Index,中文分词不理想推荐ES

db.fullText.insert({name:"aa",description:"nopains,no gains"})
db.fullText.insert({name:"ab",description:"paypains,get gains"})
db.fullText.insert({name:"ac",description:"afriend in need,a friend in deed"})

创建索引并指定语言

db.fullText.createIndex(
   { description : "text" },
   { default_language: "english" }
)
db.fullText.find({"$text": {"$search":"pains"}})

全文索引名称

db.collection.createIndex(
   {
     content: "text",
     "users.comments": "text",
     "users.profiles": "text"
   }
)

生成的默认索引名:

content_text_users.comments_text_users.profiles_text

指定名称

db.collection.createIndex(
   {
     content: "text",
     "users.comments": "text",
     "users.profiles": "text"
   },
   {
     name: "MyTextIndex"
   }
)

使用指定名称删除索引

db.collection.dropIndex("MyTextIndex")

哈希索引

针对属性的哈希值进行索引查询,当要使用Hashed index时, MongoDB能够自动的计算hash值,无需程序计算hash值。注: hash index仅支持等于查询,不支持范围查询。

db.collection.createIndex({"field": "hashed"})

 创建复合hash索引,4.4以后的版本

db.collection.createIndex( { "fieldA" : 1,"fieldB" : "hashed", "fieldC" : -1 } )

索引管理

获取针对某个集合的索引

db.collection.getIndexes()

索引的大小

db.collection.totalIndexSize()

索引的重建

db.collection.reIndex()

索引的删除,注意: _id 对应的索引是删除不了的

db.collection.dropIndex("INDEX-NAME")
db.collection.dropIndexes()

1.MongoDB的索引种类有?

A 单键索引

B 多键索引

C 文本索引

D 以上者是

MongoDB应用实战

Java访问MongoDB

连接MongoDB

<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.12.11</version>
</dependency>
import org.bson.BsonDocument;
import org.bson.BsonInt64;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
public class MongoClientConnectionExample {
    public static void main(String[] args) {
        String connectionString = System.getProperty("mongodb.uri");
        try (MongoClient mongoClient = MongoClients.create(connectionString)) {
            List<Document> databases = mongoClient.listDatabases().into(new ArrayList<>());
             databases.forEach(db -> System.out.println(db.toJson()));
       }
   }
}

 创建集合

database.createCollection("exampleCollection");

文档添加

MongoClient mongoClient = new MongoClient("192.168.139.132", 37017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("exampleCollection");
Document document = Document.parse("{name:'lisi',city:'bj',birth_day:new ISODate('2001-08-
01'),expectSalary:18000}");
collection.insertOne(document );
mongoClient.close();

文档查询

MongoClient mongoClient = new MongoClient("192.168.139.132", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("exampleCollection");
Document sdoc=new Document();
//按expectSalary倒序
sdoc.append("expectSalary", -1);
FindIterable<Document> findIterable = collection.find().sort(sdoc);
for (Document document : findIterable) {
 System.out.println(document);
 }
//按指定的属性值查询
FindIterable<Document> documents = collection.find(new Document("expectSalary", new Document("$eq", 12000)));
for (Document document4 : documents) {
    System.out.println(document4);
}
mongoClient.close();

文档查询过滤

MongoClient mongoClient = new MongoClient("192.168.139.132", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("exampleCollection");
Document sdoc=new Document();
//按expectSalary倒序
sdoc.append("expectSalary", -1);
FindIterable<Document> findIterable = collection.find(Filters.gt("expectSalary",21000)).sort(sdoc);
for (Document document : findIterable) {
 System.out.println(document);
}
mongoClient.close();

1.Java直连MongoDB需引入哪个包

A spring-data-mongodb

B spring-boot-starter-mongodb

C mongo-java-driver

D mysql-connector-java

复习:

 FastDFS集成Nginx_环境搭建

 下载Fastdfs的Nginx模块包

cd /usr/local
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
tar -zxvf V1.22.tar.gz

安装Nginx依赖文件

yum install -y gcc gcc-c++ zlib zlib-devel
openssl openssl-devel pcre pcre-devel gd-devel epel-release

下载Nginx软件包

get https://nginx.org/download/nginx1.19.2.tar.gz

cd nginx-1.19.2/

配置Nginx服务器

#建立Makefile文件,检查Linux系统环境以及相关的关键属性。

./configure --add-module=/usr/local/fastdfsnginx-module-1.22/src/

#编译项目,主要将gcc源代码编译成可执行的目标文件

make

#根据上一步骤编译完成的数据安装到预定的目录中。

make install

注意:

–add-module:为nginx添加一个fastdfs-nginx-module模块,值为该模块在当前系统的路径

–prefix:指定nginx安装位置 

将Fastdfs软件包里面的http.conf和mime.types拷贝到/etc/fdfs 目录下

cp /usr/local/src/fastdfs6.06/conf/mime.types /etc/fdfs/

cp /usr/local/src/fastdfs-6.06/conf/http.conf /etc/fdfs/

 配置Nginx的fastdfs模块,并编辑文件

#拷贝文件
[root@localhost opt]cp /usr/local/fastdfsnginx-module-1.22/src/mod_fastdfs.conf
/etc/fdfs/
[root@localhost fdfs] vim mod_fastdfs.conf
#保存日志目录
base_path=/data/fastdfs/storage      
#tracker 服务器的 IP 地址以及端口号
tracker_server=192.168.66.100:22122  
#文件url中是否有group 名
url_have_group_name = true          
#存储路径
store_path0=/data/fastdfs/storage  
group_count = 1                     #设置组的个数
#然后在末尾添加分组信息,目前只有一个分组,就只写一个
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

配置Nginx

server {
    listen       80;
    server_name localhost;
    
    location ~ /group[1-3]/M00 {
        alias /data/fastdfs/storage/data;
       ngx_fastdfs_module;
   }
    # 根目录下返回403
    location = / {
         return 403;
     }
    # log file
    access_log logs/img_access.log access;
}

启动Ningx服务

# 进入sbin目录
[root@tracker nginx]# cd sbin/
# 启动服务 -c:指定配置文件
[root@tracker sbin]# ./nginx -c
/usr/local/nginx/conf/nginx.conf

查看服务启动情况

[root@tracker sbin]# ps -ef | grep nginx

启动追踪服务与存储节点服务 

[root@tracker sbin]# fdfs_trackerd
/etc/fdfs/tracker.conf start
[root@tracker sbin]# fdfs_storaged
/etc/fdfs/storage.conf start

 上传图片测试

将图片上传至linux系统后,使用指令上传至分布式文件系统

[root@tracker fdfs]# fdfs_upload_file
/etc/fdfs/client.conf /root/xxxxx.png
group1/M00/00/00/wKhyj1wrIUWAL5ASAAAfA8PiO7Y493.png

通过浏览器远程访问

http://192.168.66.100/group1/M00/00/00/wKhyj1wrIfqAD3NFAAn1fNRE8_M976.png

 

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

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

相关文章

2023年7月4日 星期二 linux驱动作业

Linux内核驱动开发板的灯的实验 头文件 #ifndef __HEAD_H__ #define __HEAD_H__#define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0x50007014#define PHY_LED…

LK409.最长回文字符串

题目描述 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回 通过这些字母构造成的 最长的回文串 。 在构造过程中&#xff0c;请注意 区分大小写 。比如 “Aa” 不能当做一个回文字符串。 解题思路 有两种情况可以构成回文字符串: 1.全部字符呈偶数对出现 2.一…

simulink 仿真时间 求解器 数据类型 delay模块

仿真时间&#xff0c;模型运行的时长 显示数据类型&#xff0c;改完数据类型后要run一次才能正常显示更改后的类型 delay模块&#xff0c;延时步长 综合训练 搭建一个累加器&#xff0c;每次调用1 //c语言 static int a 0; a;

一次搞懂ArrayBuffer和Unit8Array(TypedArray)和Array!

实现入职第三天&#xff0c;用到了公司自研框架里面的网络请求&#xff0c;返回的数据会被自动改成ArrayBuffer类型&#xff0c;研究了半天没明白ArrayBuffer怎么转成字符串数据&#xff0c;看了mentor发来的示例代码&#xff0c;经过一番研究也是明白了ArrayBuffer和它相关的东…

Python基础教程:读写文件IO操作

Python 是一门优秀的开发语言&#xff0c;它不仅是一种动态的脚本语言&#xff0c;还支持多种应用场景。在 Python 中&#xff0c;我们可以使用文件和 I/O 操作来读取和写入文件。它比起其他编程语言&#xff0c;使用更加方便。 1.读写文本文件 在 Python 中&#xff0c;读写…

【轴承RUL预测代码】基于DRSN(深度残差收缩网络)

DRSN&#xff08;深度残差收缩网络&#xff09;和完整Transformer&#xff08;encoderdecoder&#xff09; DRSN&#xff08;深度残差收缩网络&#xff09;模型的代码模型的打印训练与预测训练集的可视化&#xff1a;测试集的可视化&#xff1a; DRSN-TCN的效果 DRSN&#xff0…

贝叶斯与认知——读《贝叶斯的博弈》有感

关于对贝叶斯与认知问题的相关思考 一、贝叶斯定理二、贝叶斯与认知的本质三、经验的偏见四、总结 自古以来&#xff0c;人们就在思考知识来自何处&#xff0c;“冯翼惟象&#xff0c;何以识之&#xff1f;”&#xff0c;对此的思考逐渐发展成哲学的认识论分支。德国哲学家康德…

二十三种设计模式第十六篇--观察者模式

观察者模式是一种行为型设计模式&#xff0c;它建立了一种对象间的一对多依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式可以实现对象间的松耦合通信&#xff0c;提高系统的可扩展性和灵活性。 观察者模…

开源白盒 静态代码分析对比

背景 源代码安全检测是安全开发流程&#xff08;SDL&#xff09;中非常重要的一部分&#xff0c;在58集团的CI/CD流程里面临每天几千数量级的构建及发布&#xff0c;白盒检测的自动化能力显得极为重要。白盒扫描从漏洞发现的需求转变为了需要适应企业CI/CD流程的白盒建设需求&…

Win2008 IIS TLS1.0升级到TLS1.2或TLS1.3

最近chrome和Edege浏览器已经把TLS 1.0标记为不安全了。 如果是开发网站&#xff0c;而使用的TLS 1.0&#xff0c;则直接打开不网站&#xff0c;也没有醒目的提示&#xff0c;你很难知道问题所在&#xff0c;总以为是SSL安装失败了&#xff0c;其实是TSL版本太低了。 如果是开…

密码学学习笔记(六):Hash Functions - 哈希函数2

哈希函数是怎么构成的&#xff1f; Merkle–Damgrd结构 哈希函数需要能够处理任意长度的输入。许多散列函数&#xff0c;例如MD5、SHA-1、SHA-2&#xff0c;都是由构建块&#xff08;称为压缩函数&#xff09;组成的&#xff0c;这些构建块可以处理特定的块大小&#xff0c;并…

SSM 整合 Shiro 安全框架【快速入门】

一、搭建ssm工程&#x1f349; 1.创建工程&#x1f95d; 更改web路径 创建所需目录 2.引入依赖&#x1f95d; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"h…

LVS+Keepalived负载均衡高可用群集

目录 一、Keepalived高可用详解 1.应用场景 2.介绍和原理简介 3.主要模块和作用 二、LVSkeepalived配置实例&#xff08;抢占模式&#xff09; 1.配置NFS共享存储器 2.配置节点web服务&#xff08;两台的配置相同&#xff09; 3.配置主备LVSkeepalived负载调度器 三、非…

JAVA判断当前时间是否为节假日、周末、工作日,简单有效!

JAVA判断当前时间是否为节假日、周末、工作日 需求 有这么个需求&#xff0c;需要判断拿到的这个日期是否为节假日&#xff0c;周末&#xff0c;工作日&#xff0c;然后做剩下的操作。 话不多说&#xff0c;上代码 1.首先需要拿到节假日api 节假日API地址 2.拿到接口&…

Open3d计算点云切片

computePlane()给出三个点计算平面方程参数 设通过P1&#xff0c;P2&#xff0c;P3三点的平面方程为A(x - x1) B(y - y1) C(z - z1) 0 。化简为一般式&#xff1a;Ax By Cz D 0。 将P1(x1,y1,z1)点数值代入方程Ax By Cz D 0。 即可得到&#xff1a;Ax1 By 1 Cz1 D…

css之文字宽度自适应、width、fit、content

文章目录 效果图htmlcss解析width 效果图 html <div><div class"width_600"><div class"d_f ai_c bc_1296db padding_7 radius_8 cursor_pointer" style"width: fit-content;"><img class"width_26 height_26" …

ps通道抠图

相信我们在抠图的时候都遇到过这种问题&#xff1a; 在扣取一些像树木、毛发等类似图像的时候&#xff0c;用魔棒或者快速选择工具根本抠不完整&#xff08;图1&#xff09;&#xff0c;而且就算抠出来也是毛毛刺刺的&#xff0c;使用效果很拉跨。而通道抠图&#xff08;图2&a…

真的不想知道文档翻译在线翻译怎么弄才简单吗

从前有一个小明&#xff0c;他是一名国际商人。他需要将公司的商业计划书翻译成多种语言&#xff0c;以便在海外市场推销。但是&#xff0c;他并不会所有需要的语言&#xff0c;于是他开始寻找一种方法来进行文档翻译。终于&#xff0c;他找到了一种文档翻译的有效方法&#xf…

Dynamsoft Barcode Reader crack

Dynamsoft Barcode Reader crack SDK经过重构&#xff0c;与DynamsoftCaptureVision(DCV)体系结构集成&#xff0c;该体系结构包括&#xff1a; ImageSourceAdapter(ISA)-标准输入接口&#xff0c;用于将来自不同来源的图像数据转换为标准输入图像数据。此外&#xff0c;ISA结合…

2023第七届河南省高等学校信息安全对抗大赛-御网杯-ISCC2023线下赛-misc(详解-思路-脚本)

芜湖~ 是真累呀 原本一天的时间 硬打了一天半 还是那句话 不评价 各位道友心中自有公论 我misc手又发现一个小小的非预期 哎 没想到线下也有这种情况 欧克 以下是我自己的一些思路和解析 有什么问题或者建议随时都可以联系我 2023第七届河南省高等学校信息安全对抗大赛-御…