您的位置:首页 > 数据库 > Mongodb

mongodb介绍及基本操作

2017-04-26 21:44 363 查看

一、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<
4000
span class="hljs-string">","grade:2.0}
]
}


BSON常用类型符

TypeNumberAlias
Double1“doubles”
字符串2“string”
对象3“object”
数组4“array”
二进制数据5“binData”
ObjectId7“objectId”
Boolean8“bool”
日期9“date”
10“null”
正则表达式11“regex”
JavaScript13“javascript”
32位整数16“int”
时间戳17“timestamp”
64位整数18“long”
Decimal12819“decimal”
Min key-1“minkey”
Max key127“maxkey”

4-SQL映射

SQL 术语概念MongoDB 术语/概念
数据库database
collection(连接)
document(文档)
field(域)
索引index
表连接内嵌文档和链接
主键primary key(自动默认为 _id)

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

操作界面展示



存储数据展示



数据库链接页面



二、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



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: