MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

该文章大量文字摘自:MongoDB 教程 | 菜鸟教程 (runoob.com)

mongodb中的概念

  • database:数据库

  • collection:集合,对应sql中的数据库表(table)

  • document:文档,对应sql中的数据(data)

  • field:域,对应sql中的数据列(column)

  • index:索引

  • primary key:主键,MongoDB自动将_id字段设置为主键

安装

Windows

下载地址:https://www.mongodb.com/download-center/community

下载.msi版本,点击选择安装路径点击下一步即可

数据库

连接数据库

标准 URI 连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

比如:

mongodb://localhost:27017 # 连接到本机的27017端口的Mongodb数据库
mongodb://root:1234@localhost/test # 使用用户名(root)和密码(1234)连接登录到指定数据库(test)
mongodb://localhost/?safe=true # 以安全模式连接到数据库,端口不写默认27017

问号后面的选项为:

选项

描述

replicaSet=name

验证replica set的名称。 Impliesconnect=replicaSet.

slaveOk=true|false

true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。

safe=true|false

true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS).false: 在每次更新之后,驱动不会发送getLastError来确保更新成功。

w=n

驱动添加 { w : n } 到getLastError命令. 应用于safe=true。

wtimeoutMS=ms

驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true.

fsync=true|false

true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true.false: 驱动不会添加到getLastError命令中。

journal=true|false

如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true

connectTimeoutMS=ms

可以打开连接的时间。

socketTimeoutMS=ms

发送和接受sockets的时间。

use test

注意:NoSQL不能像mysql一样,使用use 数据库 之后添加新的集合之后才会出现名字

db.dropDatabase()

show databases

数据表/集合

db.createCollection("test")

db.test.drop()

show tables

数据记录行/文档

db.test.insert({title: 'MongoDB'})

删除所有数据

db.test.remove({})

删除指定数据

db.test.remove({'title':'MongoDB'})

查找全部

db.test.find().pretty()

查找指定数据

db.test.find({"by":"test", "title":"MongoDB"}).pretty()

等于:db.col.find({"by":"test"}).pretty()

小于:db.col.find({"likes":{$lt:50}}).pretty()

小于或等于:db.col.find({"likes":{$lte:50}}).pretty()

大于:db.col.find({"likes":{$gt:50}}).pretty()

大于或等于:db.col.find({"likes":{$gte:50}}).pretty()

不等于:db.col.find({"likes":{$ne:50}}).pretty()

db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB'}})

操作符

$type:检索集合中匹配的数据类型

db.col.find({"title" : {$type : 'string'}})

其他方法

limit:读取指定数量的数据记录

db.col.find({},{"title":1,_id:0}).limit(2)

skip:跳过指定数量的数据

db.col.find({},{"title":1,_id:0}).limit(1).skip(1)

sort:数据进行排序

db.col.find({},{"title":1,_id:0}).sort({"likes":-1})

"likes"是字段;1是升序,-1是降序

索引

创建

db.test.createIndex({"title":1})

语法中"title"值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

查看集合索引

db.test.getIndexes()

查看集合索引大小

db.test.totalIndexSize()

删除集合所有索引

db.test.dropIndexes()

删除集合指定索引

db.test.dropIndex("索引名称")

SQL转换Nosql

该章节是为了直观感受MongoDB中,调用的命令与sql对应关系。以test表为例:

SHOW DATABASES;

DROP DATABASE test;
db.dropDatabase()

CREATE DATABASE test;
use test;

SHOW TABLES;

DROP TABLE test;
db.test.drop()

CREATE TABLE test({
	id INT PRIMARY KEY AUTO_INCREMENT,
	name string
});
db.createCollection("test")

SELECT * FROM test;
db.test.find().pretty()

SELECT COUNT(*) FROM test;
db.test.count();

SELECT * FROM test WHERE id = 1;
db.test.find({"id" : 1}).pretty()

SELECT * FROM test WHERE id < 1;
db.col.find({"id":{$lt:1}}).pretty()

SELECT * FROM test WHERE id <= 1;
db.col.find({"id":{$lte:50}}).pretty()

SELECT * FROM test WHERE id > 1;
db.col.find({"id":{$gt:50}}).pretty()

SELECT * FROM test WHERE id >= 1;
db.col.find({"id":{$gte:50}}).pretty()

SELECT * FROM test WHERE id != 1;
db.col.find({"id":{$ne:1}}).pretty()

SELECT * from test  WHERE name LIKE '%l%';
db.users.find({"name":/l/}); 

SELECT * from test  WHERE name LIKE 'l%';
db.users.find({"name":/^l/}); 

SELECT * from test ORDER BY id DESC/ASC;
db.col.find().sort({"id":-1/1})

SELECT * FROM test WHERE id = 1 LIMIT 2;
db.test.find({"id" : 1}).limit(2)

SELECT COUNT(*) FROM USER WHERE type = "book"	
var map1 = function () {emit(this.type, 1)};
var reduce = function(type , count){return Array.sum(count)}
db.test.mapReduce(map1 , reduce , {query:{type : "book"} , out:"test"}).find()

INSERT INTO test (id , name) VALUES (1 , li);
db.test.insert({"id" : 1,"name": 'li'})

UPDATE test SET name = 'li' WHERE id = 1;
db.test.update({'name':'li'},{$set:{'id':1}})

DELETE FROM test WHERE id = 1;
db.test.remove({'id': 1 })

链接java

引入依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.1.1</version>
</dependency>

链接到数据库

import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
​
MongoDBJDBC {
    public static void main(String args[]){
      try{   
         MongoClient mongoClient =new MongoClient(“ localhost”,27017);
       
         //连接到数据库
         MongoDatabase mongoDatabase = mongoClient.getDatabase("mysql");  
         System.out.println(“成功连接到数据库”);
​
         mongoDatabase.createCollection("test");
         System.out.println("集合创建成功");
​
         MongoCollection <Document> collection = mongoDatabase.getCollection("test");
​
         FindIterable<Document> list = collection.find();//获取文档集合
         for(Document doc: list){//遍历集合中的文档输出数据
            System.out.println("name:"+ doc.getString("name") );
            System.out.println("sex:"+ doc.getString("sex") );
            System.out.println("age:"+ doc.getDouble("age") );//默认为浮点型
            System.out.println("address:"+ doc.getString("address") );
            System.out.println("--------------------------");
        }
        
        Map<String, Object> map=new HashMap();
        map.put("name", "铁扇公主");
        map.put("sex", "女");
        map.put("age", 35.0);
        map.put("address", "芭蕉洞");     
        Document doc=new Document(map);       
        collection.insertOne(doc);//插入一条记录
​
        BasicDBObject bson=new BasicDBObject("name", "铁扇公主");
        collection.deleteOne(bson);//删除记录(符合条件的第一条记录)
        
        //修改的条件
        BasicDBObject bson= new BasicDBObject("name", "红孩儿");
        //修改后的值
        BasicDBObject bson2 = new BasicDBObject("$set",new BasicDBObject("address", "南海"));
        //参数1:修改条件  参数2:修改后的值
        collection.updateOne(bson, bson2);
​
      } catch(Exception e){
        System.err.println(e.getClass()。getName()+“:” + e.getMessage());
     }
   }
}
文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
数据库 非关系型数据库
喜欢就支持一下吧