MongoDB实现简单增删改查

MongoDB菜鸟教程地址

MongoDB菜鸟教程地址

为什么使用MongoDB

1.面想文档存储,BJSON形式数据
2.支持丰富的查询功能
3.索引可以在任意列建立
4.高可扩展性
5.易于调试,易于扩展
6.使用内存作为工作区,存取效率高

Windows MongoDB安装

MongoDB下载地址:https://www.mongodb.com/download-center/community
可视化界面下载地址:https://www.mongodb.com/try/download/compass

MongoDB下载后,需要在根目录创建data\db文件,用于存放数据库,MongoDB不会自动创建这个目录。
执行 bin 目录,下的 mongod.exe 启动 MongoDB。
在这里插入图片描述启动后会出现这个窗口,标红的位置,就是端口号,默认:27017.

然后打开可视化界面目录下的 MongoDBCompass.exe,创建连接,就可以看到 MongoDB 的初始数据库了。
在这里插入图片描述

MongoDB的基本概念

1.数据库:一个 MongoDB 可以创建多个数据库,数据存储在开始创建的data目录中。每个数据库都有自己的集合和权限。
2.集合:相当于 mysql 的表。集合没有固定的结构,存入什么数据都可以,但是通常我们会插入有关联性的数据。
3.文档:相当于 mysql 中的数据。
如下图:在这里插入图片描述
my就是数据库,下面有user 和 comments 两个集合,其中的数据就是文档

MongoDB的基本命令

数据库操作

查看所有数据库:show dbs 此命令展示所有数据库

创建数据库:use t_database 如果数据库 t_database 不存在,则创建 t_database 数据库,否则切换到 t_database 数据库

删除数据库:查看了db.dropDatabase() db 为切换到指定数据库后的实例对象(本人理解),将切换到的数据库删除

集合操作

查询所有集合:show collections 此命令展示所有 当前数据库 的集合

新增集合:db.createCollection(name, options) name为集合名称,options: 可选参数。可选参数包括:capped:如果为true,集合有固定大小,size:集合最大值,max:包含文档的最大数量
例如:

db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )

删除集合:db.collection.drop() 如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

文档操作

查询所有文档:db.collection.find() collection 是集合名称
新增文档:db.collection .insert(document) 或 db.collection.save(document)
例子:

db.collection.insert({userName: '张三', 
    nage: '20',
    address: '北京',
    company: '阿里'
})

更新文档:b.collection.update( query,update,multi)
query:update 的条件,相当于 mysql 的 where
update:update 的更新操作符,相当于 mysql 的 set
multi:update 如果找到多条记录,默认只更新一条,设置为 true 则全部更新
例如:

db.collection.update({'name':'张三'},{$set:{'name':'李四'}},{multi:true})

删除文档:db.collection.remove(query,justOne)
query:remove 的条件,相当于 mysql 的 where
justOne:默认false,删除所有匹配的文档。 设置为true,则只删除一个
例如:

db.collection.remove({'name':'张三'})

如果remove后面什么也不写。则删除全部 db.collection.remove()

文档查询

查询文档所有:db.collection.find()

查询一个文档:db.collection.findOne()

查询姓名叫张三的文档:db.collection.find({name : “张三”}) , ()里面 就相当于 mysql 的 where 条件,等价于 mysql name = “张三” 的写法,如果有多个查询条件,就往后加。
写法:db.collection.find({key1:value1, key2:value2})

模糊查询:db.collection.find({name : /张三/}) /张三/ 等价于 mysql 的 %张三%

查询年龄小于等于20的文档:

db.collection.find({age:{$lte:NumberInt(20)}}) 

由于 MongoDB 的文档数据没有数字类型,需要用 NumberInt() 转成数字类型。

//等于:
{age:NumberInt(20)});
//小于:
{age:{$lt:NumberInt(20)}}) ;
//大于:
{age:{$gt:NumberInt(20)}});
//小于等于:
{age:{$lte:NumberInt(20)}}) ;
//大于等于:
{age:{$gte:NumberInt(20)}});

and条件:

 db.collection.find({$and:[{name:"张三"},{age:NumberInt(20)}]})
 等价于
 db.collection.find({age:NumberInt(20),name:"张三"} )

or条件:

 db.collection.find({$or:[{name:"张三"},{age:NumberInt(20)}]})

复合条件

 {$or:[{$and:[{name:"李四"},{age:NumberInt(21)}]},{name://}]}

springboot 集成 MongoDb

首先我用可视化工具创建了一个名字叫 My 的数据库,然后在 My 数据库下创建了一个 comments 集合

在这里插入图片描述

增加 maven 依赖

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

在yml配置文件中配置 MongoDb

spring:
  data:
    mongodb:
      host: localhost #服务器域名,我用的本机
      database: my    #数据库名称
      port: 27017     #端口号,默认是  27017 ,可以不写

创建集合实例,由于 MongoDb 集合没有固定结构,所以一个集合可能会有很多实例。

//@Document表明了实体是文档类型
//collection = "comments" 指定了 集合的名称,如果和 集合名称一样,此处可以省略
@Document(collection = "comments")
@Data
public class Comments {

    private String id;
    private String acticleid;
    private String parentid;
    private String content;
    private String status;
    private String userId;
    private String nickName;
    private Integer likeNum;
    private Integer replyNum;
    private Date createTime;

新键dao层


/**
 * 此类目的主要是继承 MongoRepository 调用其中的接口,实现 CURD
 */
@Repository
public interface MongoDbDao extends MongoRepository<Comments,String> {

}

创建service

@Service("mongoDbService")
public class MongoDbServiceImpl implements MongoDbService {

    @Autowired
    private MongoDbDao mongoDbDao;

    /**
     * 新增
     * @param comments
     */
    @Override
    public void insert(Comments comments) {
        mongoDbDao.insert(comments);
    }

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<Comments> queryAll() {
        return mongoDbDao.findAll();
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @Override
    public Optional<Comments> queryById(String id) {
        return mongoDbDao.findById(id);
    }

    /**
     * 根据id删除
     * @param id
     */
    @Override
    public void deleteById(String id) {
        mongoDbDao.deleteById(id);
    }
}

使用测试类进行测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MongoServiceTest.class)
public class MongoServiceTest extends MongoDbApplication {

    @Autowired
    private MongoDbService mongoDbService;

    @Test
    public void insert() {
        Comments comments = new Comments();
        comments.setLikeNum(0);
        comments.setContent("这是一个评论");
        comments.setNickName("张三");
        comments.setCreateTime(new Date());
        comments.setParentid("0");
        comments.setReplyNum(0);
        comments.setStatus("1");
        comments.setUserId("10");
        comments.setActicleid("1");
        mongoDbService.insert(comments);
    }

    @Test
    public void queryAll() {
        System.out.println(mongoDbService.queryAll());
    }

    @Test
    public void queryById() {
        System.out.println(mongoDbService.queryById(""));
    }

    @Test
    public void deleteById() {
        mongoDbService.deleteById("");
    }
}

如果 where 条件不想用id,在dto新增 方法
先写 List find 就会出现如下图,选择查什么
在这里插入图片描述
然后选择以后后会接着选条件
在这里插入图片描述
如果这些还不能满足你的要求,那就用 StringBoot 自己集成的 MongoTemplate,总有一款你喜欢的
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个连接到 MongoDB 数据库并进行增删操作的 VC++ 示例代码: ```c++ #include <iostream> #include <mongoc.h> int main(int argc, char* argv[]) { mongoc_client_t* client; mongoc_collection_t* collection; mongoc_cursor_t* cursor; bson_t* query; bson_t* doc; bson_error_t error; const char* uri_string = "mongodb://localhost:27017"; const char* db_name = "mydb"; const char* collection_name = "mycollection"; mongoc_init(); client = mongoc_client_new(uri_string); if (!client) { std::cout << "Failed to parse URI." << std::endl; return EXIT_FAILURE; } collection = mongoc_client_get_collection(client, db_name, collection_name); // insert document doc = bson_new(); BSON_APPEND_UTF8(doc, "name", "John"); BSON_APPEND_INT32(doc, "age", 25); if (!mongoc_collection_insert_one(collection, doc, NULL, NULL, &error)) { std::cout << "Insert failed: " << error.message << std::endl; return EXIT_FAILURE; } bson_destroy(doc); // find document query = bson_new(); BSON_APPEND_UTF8(query, "name", "John"); cursor = mongoc_collection_find_with_opts(collection, query, NULL, NULL); const bson_t* doc_result; while (mongoc_cursor_next(cursor, &doc_result)) { char* str = bson_as_json(doc_result, NULL); std::cout << str << std::endl; bson_free(str); } bson_destroy(query); mongoc_cursor_destroy(cursor); // update document query = bson_new(); BSON_APPEND_UTF8(query, "name", "John"); doc = bson_new(); BSON_APPEND_UTF8(doc, "$set", "{ age: 26 }"); if (!mongoc_collection_update_one(collection, query, doc, NULL, NULL, &error)) { std::cout << "Update failed: " << error.message << std::endl; return EXIT_FAILURE; } bson_destroy(query); bson_destroy(doc); // delete document query = bson_new(); BSON_APPEND_UTF8(query, "name", "John"); if (!mongoc_collection_delete_one(collection, query, NULL, &error)) { std::cout << "Delete failed: " << error.message << std::endl; return EXIT_FAILURE; } bson_destroy(query); mongoc_collection_destroy(collection); mongoc_client_destroy(client); mongoc_cleanup(); return EXIT_SUCCESS; } ``` 需要注意的是,这里使用的是 MongoDB C Driver 进行操作,需要在项目中引入相应的库文件和头文件。另外,这里只是一个简单的示例,实际使用时还需要进行错误处理和资源释放等操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值