首页 > 数据库 >MongoDB简单使用

MongoDB简单使用

时间:2023-09-19 21:14:00浏览次数:43  
标签:mongoCollection BasicDBObject 简单 MongoDB year db mongodb 2020 使用

介绍

MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库。

安装

docker pull mongo

下载最新版本的镜像

docker run -d --name mongo -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=xxx123 -p 27017:27017 mongo

设置初始账号和密码,注意开启防火墙对27017端口的限制

使用

windows客户端下载
MongoDB Shell Download

mongosh --host=ip --port=27017 -u=root -p=xxx123

增删改查

show dbs //显示所有数据库,如果db中没有数据,不显示,
use test_info //切换到test_info,db不存在就创建
db.movies.insertOne({title:"The First",year:2020}) //插入一条记录,会自动添加 _id 字段
db.movies.insertMany([{title:"The First",year:2020}]) //插入多条记录
db.movies.find({title:{$regex:"The"})//数据查询,正则表达式匹配,类似mysql的like
db.movies.find({year:{$gt:2010})//查询年份大于2010的电影
db.movies.find({year:2010})//查询年份等于2010的电影 相当于 db.movies.find({year:{$eq:2010}})
db.movies.updateOne({year:2020},{$set:{title:"The2"}}) //查询year为2020的记录(匹配到的第一条),title更新为The2
db.movies.updateMany({year:2020},{$set:{title:"The2"}}) //查询year为2020的记录(匹配到的多条),title更新为The2
db.movies.deleteOne({year:2020}) //删除year为2020的匹配到的第一条
db.movies.deleteMany({year:2020}) //删除year为2020的匹配到的多条
show collections //查询表

db类似mysql的数据库,不存在就创建
movies类似mysql的表,不存在就创建

用户及权限

use test_info
db.createUser({user:"root2",pwd:"xxx123",roles:[{role:"dbOwner",db:"test_info"},{role:"dbOwner",db:"admin"}]}) //在当前库(test_info)下创建用户及授权
show users //显示当前库下的用户

哪个库创建的用户必须在哪个库做认证

mongosh --host=ip --port=27017 -u=root2 -p=xxx123 admin //Authentication failed. 因为root2是在test_info库下创建的
mongosh mongodb://root2:xxx123@ip:27017/admin //Authentication failed. 因为root2是在test_info库下创建的
mongosh mongodb://root2:xxx123@ip:27017/test_info //Authentication Successfully.

Java客户端

<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongodb-driver-sync</artifactId>
  <version>4.8.2</version>
</dependency>
import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;

import java.util.Collections;

public class TestMongoDBClient {
    public static void main(String[] args) {
//        testDelete();
        testFind();
    }

    private static void testDelete() {
        MongoCollection<Document> mongoCollection = mongoCollection();
        BasicDBObject queryObj = new BasicDBObject();
        queryObj.put("year", new BasicDBObject("$gt", 2020));
        mongoCollection.deleteOne(queryObj);
    }

    private static void testUpdate() {
        MongoCollection<Document> mongoCollection = mongoCollection();
        BasicDBObject queryObj = new BasicDBObject();
        queryObj.put("year", new BasicDBObject("$gt", 2020));
        BasicDBObject setObj = new BasicDBObject();
        setObj.put("$set", new BasicDBObject("title", "The First22"));
        mongoCollection.updateMany(queryObj, setObj);
    }

    private static void testInsert() {
        MongoCollection<Document> mongoCollection = mongoCollection();
        Document document = new Document();
        document.put("title", "THe fisrt");
        document.put("year", 2023);
        mongoCollection.insertMany(Collections.singletonList(document));
    }

    private static void testFind() {
        MongoCollection<Document> mongoCollection = mongoCollection();
        //两种拼接查询条件的方式,第一种
        BasicDBObject queryObj = new BasicDBObject();
        queryObj.put("year", new BasicDBObject("$gt", 2020));
        //两种拼接查询条件的方式,第二种
        Bson filter = Filters.gte("year", 2020);
        FindIterable<Document> findIterable = mongoCollection.find(filter);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    private static MongoCollection<Document> mongoCollection() {
        MongoClient mongoClient = mongoClient();
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test_info");
        return mongoDatabase.getCollection("movies");
    }

    private static MongoClient mongoClient() {
        //mongodb://[username:password@]host[/[database][?options]]
        return MongoClients.create("mongodb://root2:xxx123@ip/test_info");
    }
}

参考

CRUD操作命令
MongoDB Driver 3.8 Documentation

标签:mongoCollection,BasicDBObject,简单,MongoDB,year,db,mongodb,2020,使用
From: https://www.cnblogs.com/strongmore/p/17139828.html

相关文章

  • redis和mysql的区别以及它们是如何配合使用的
    redis和mysql的区别:1、从类型上来说,mysql是关系型数据库,redis是缓存数据库。2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。3、mysql和redis因为需求的不同,一般都是配合使用。mysql和redis的数据库类型,m......
  • 使用 Amazon EC2 预留实例最大限度地节省成本和提高灵活性
    简介:随着云计算不断改变企业的运营方式,优化成本已成为首要任务。利用AmazonEC2预留实例是实现云端成本节约最有效的方法之一。本文将探讨什么是AmazonEC2预留实例,它与按需实例的区别,以及它在成本节约和灵活性方面提供的好处。背景:云计算改变了IT格局,使企业能够按......
  • 这话说得对"AI不会淘汰人类,但是AI会淘汰不会使用AI的人"
    今天简单和大家聊聊今年火的不行不行的-----chatGtp最近做项目遇到一个问题,折腾好久没找到问题出在哪里,于是抱着试一试的心里,问问chatGtp,看看能否给出,解决问题的灵感,于是我将控制台的报错信息(微信小程序开发),直接复制给了chatGtp,看他如何回答:他真的给出了自己的看法和思......
  • Jasper模板使用记录七——Group分组
    Group特点1.通过Group分组可以将集合中的数据进行分组显示2.Group分组有GroupHeader和GroupFooter可以在每个组的前后添加元素3.Group分组的效果是在Detail中显示的注意点Group并不会将乱序的集合数据进行分组和排序,只会按照集合的顺序进行遍历,如果本条数据和上一条......
  • 使用DD命令在Linux中轻松创建ISO镜像U盘启动盘
    创建Linux系统U盘启动盘:一个简易教程当前,我正在使用Linux系统,具体是Xubuntu版本。在我采纳这个系统之前,我使用了Windows下的UltraISO软件来制作Linux的U盘启动盘。但是,你知道吗?在Linux系统中,我们只需使用一个简单的DD命令,便可以轻松制作Linux的ISO系统U盘启动盘。这样,我们可以轻......
  • Jasper模板使用记录六——模板字体问题
    1.TIBCOjaspersoft设置字体使用TIBCOjaspersoft软件进行模板设计时,可以为各个组件设置显示的字体,通常大部分字体可以使用,如果有不能使用的字体,也可以通过下载字体文件,并为TIBCOjaspersoft进行设置,先选中项目,然后进行如下操作:2.后台工程设置字体2.1、创建字体配置文......
  • Jasper模板使用记录二——JSON文件数据源
    json文件数据源1.新建json文件,并将字段补充完整,示例如下:{ hosp_name:"医院", rows:[{ name:"姓名", age:12, }]}2.新建json数据源,如下:3.新建Jasper文件4.设置数据源,并导入数据源字段至Fields5.通过拖拽Paramter或Field至模板,进行模板设计......
  • Jasper模板使用记录三——数据换行问题
    通过设置组件的StreetchWithOverflow和StretchType可以让组件整行拉伸......
  • Jasper模板使用记录一——各模块特点
    模板各个模块特点Title(标题):只在整个报表的第一页的最上端显示。只在第一页显示,其他页面均不显示。PageHeader(页头):在整个报表中每一页都会显示。在第一页中,出现的位置在TitleBand的下面。在除了第一页的其他页面中PageHeader的内容均在页面的最上端显示。PageFooter(......
  • 使用JGit操作Git仓库
    在某些场景下我们可能有通过Java代码操作Git仓库的需求,例如您要开发一个工具,通过拉取远程仓库的代码,分析并统计某个时间范围内各提交人的代码行数等,那么接下来的这个工具可帮助你应对Git操作的问题首先我们在项目中添加依赖<dependency><groupId>org.eclipse.jgit</groupId>......