一、Mongodb简介

1-功能特性

MongoDB 的设计目标是高性能可扩展易部署易使用,存储数据非常方便。

(1)面向集合存储,容易存储对象类型的数据。

(2)模式自由,采用无模式结构存储。在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征。

(3)支持完全索引,可以在任意属性上建立索引。

(4)支持查询,MongoDB 支持丰富的查询操作,MongoDB 几乎支持SQL中的大部分查询。

(5)支持复制和数据恢复,MongoDB 支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失。

(6)使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,可以保存任何类型的数据对象。

(7)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++ 语言的驱动程序,MongoDB 提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问MongoDB 数据库。

(8)文件存储格式为BSON(JSON 的一种扩展)。BSON 是对二进制格式的JSON 的简称,BSON 支持文档和数组的嵌套。

(9)可以通过网络访问。可以通过网络**远程访问**MongoDB 数据库。

2-介于关系型与非关系型之间的数据库

由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

3-BSON(Binary Serialized Document Format,mongodb存储类型)

它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

eg.

{
    name:"lemo",
    age:"12",
    address:{
    city:"suzhou",
    country:"china",
    code:215000
    } ,
    scores:[
    {"name":"english","grade:3.0},
    {"name":"chinese","grade:2.0}
    ]
}

BSON常用类型符

Type

Number

Alias

Double

1

“doubles”

字符串

2

“string”

对象

3

“object”

数组

4

“array”

二进制数据

5

“binData”

ObjectId

7

“objectId”

Boolean

8

“bool”

日期

9

“date”


10

“null”

正则表达式

11

“regex”

JavaScript

13

“javascript”

32位整数

16

“int”

时间戳

17

“timestamp”

64位整数

18

“long”

Decimal128

19

“decimal”

Min key

-1

“minkey”

Max key

127

“maxkey”

4-SQL映射

SQL 术语概念

MongoDB 术语/概念

数据库

database


collection(连接)


document(文档)


field(域)

索引

index

表连接

内嵌文档和链接

主键

primary key(自动默认为 _id)

5-可视化操作软件推荐:MongoChef

操作界面展示

java mongodb存储二进制文件 mongodb存储数据_增删改查

存储数据展示

java mongodb存储二进制文件 mongodb存储数据_字段_02

数据库链接页面

java mongodb存储二进制文件 mongodb存储数据_增删改查_03


二、CRUD操作

(create、read、update、delete)

1.链接数据库

//API link
mongoose.connect('mongodb://user:pass@localhost:port/database');

// replica sets
var uri = 'mongodb://user:pass@localhost:port,anotherhost:port,yetanother:port/mydatabase';
mongoose.connect(uri);

// with options
mongoose.connect(uri, options);

// connecting to multiple mongos
var uri = 'mongodb://hostA:27501,hostB:27501';
var opts = { mongos: true };
mongoose.connect(uri, opts);

// optional callback that gets fired when initial connection completed
var uri = 'mongodb://nonexistent.domain:27000';
mongoose.connect(uri, function(error) {
  // if error is truthy, the initial connection failed.
})

项目url配置文件

DB_CONFIG_URI=mongodb://mongodb://user:123gogogo@120.27.52.242:27758/homesite-dev

java mongodb存储二进制文件 mongodb存储数据_数据_04

2.插入文档

db.collection.insertOne({obj});

db.users.insertOne(
   {
      name: "sue",
      age: 19,
      status: "P"
   }
)

db.collection.insertMany({obj});

db.users.insertMany(
   [
     { name: "bob", age: 42, status: "A", },
     { name: "ahn", age: 22, status: "A", },
     { name: "xi", age: 34, status: "D", }
   ]
)

db.collection.insert(update,opations)

主键_id将被自动创建
当主键”_id”不存在时,都是添加一个新的文档,但主健”_id”存在时,就有些不同了

insert:当主键”_id”在集合中存在时,不做任何处理。

save:当主键”_id”在集合中存在时,进行更新。

opations中,ordered:true 有序插入,

3.查询文档

db.collection.find( , )

参数一为查询条件,参数二为返回的字段。

查询语句db.users.find( { status: “A” }, { name: 1, status: 1, _id: 0 } )返回结果如下:

{ "name" : "bob", "status" : "A" }
{ "name" : "ahn", "status" : "A" }
{ "name" : "abc", "status" : "A" }

name:1,status:1 意为查询返回值中包含name字段与status字段; _id: 0 意为不返回_id的值

db.users.find( { name: null } ) 意为返回name为空或者不存在name字段的所有文档(数据)。

db.users.find( { name : { $exists: false } } ) 意为查询没有包含条目的字段

db.users.find( { name : { $type: 10 } } ) 意为查询所有字段是null的文档

db.users.find( { status: “A”, age: { $lt: 30 } } ) 查询所有status值为A且age小于30文档

db.users.find( { favorites: { artist: “Picasso”, food: “pizza” } } ) 嵌套查询,查询结果如下

{
   "_id" : 1,
   "name" : "sue",
   "age" : 19,
   "type" : 1,
   "status" : "P",
   "favorites" : { "artist" : "Picasso", "food" : "pizza" },
   "finished" : [ 17, 3 ]
   "badges" : [ "blue", "black" ],
   "points" : [ { "points" : 85, "bonus" : 20 }, { "points" : 85, "bonus" : 10 } ]
}

4.更新替换

db.collection.updateMany(filter, update, options)
使用updateMany一次更新多条数据。

db.collection.updateOne(filter, update, options)
使用updateOne一次更新一条数据。

db.collection.update(filter, update, options)
使用updateOne更新数据。

filter:筛选出被过滤的文档

update:更新的数据

options:设定替换的一些设置(如:upsert:true 查询不到文档时创建新的文档、multi:true 更新符合条件的多个文档…)

5.删除文档

db.collection.remove(query,options)

query:删除文档的条件,为空时清空collection(表/链接)

eg.
db.products.remove( { qty: { $gt: 20 } } )(删除所有qty大于20的文档记录)
options: 参数示例 justOne:true 只删除匹配到的第一条数据

db.products.remove( { qty: { $gt: 20 } }, true ) 删除所有qty大于20的文档记录的第一条

> ## END