简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库 (database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式*的特点。
特点
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
1)面向集合存储,易存储对象类型的数据。
2)模式*。
3)支持动态查询。
4)支持完全索引,包含内部对象。
5)支持查询。
6)支持复制和故障恢复。
7)使用高效的二进制数据存储,包括大型对象(如视频等)。
8)自动处理碎片,以支持云计算层次的扩展性。
9)支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
10)文件存储格式为BSON(一种JSON的扩展)。
11)可通过网络访问。
各文件功能
Mongod.exe 是用来连接到mongo数据库服务器的,即服务器端。
Mongo.exe 是用来启动MongoDB shell的,即客户端。
mongodump 逻辑备份工具。
mongorestore 逻辑恢复工具。
mongoexport 数据导出工具。
mongoimport 数据导入工具。
安装MongoDB
mongod --dbpath D:\MongoDB\data --logpath=D:\MongoDB\logs\mongodb.log --logappend
MongoDB Windows环境安装及配置 这篇文章介绍windows下安装MongoDB不错
C#中使用的MongoDB DLL驱动
MongoDB.Driver.dll:顾名思义,驱动程序
MongoDB.Bson.dll:序列化、Json相关
下载地址 http://files.cnblogs.com/files/liyunhua/MongoDBDll.zip
最最常用命令
use cnblogs // use 命令用来切换当前数据库,如果该数据库不存在,则会先新建一个。
show dbs // 显示所有数据库
show collections // 显示当前数据库下的所有集合
db.users.drop() // 删除collection 如果删除成功会返回“true”,否则返回“false”
db.dropDatabase()//删除当前数据库
简单的说一下增加、修改、删除
db.users.insert({'name':'angela','sex':'feman'})// 这条命令是向users 集合中插入一条数据。如果集合users不存在,则会先新建一个,然后再插入数据,参数以JSON格式传入。
db.users.update({'name':'xiangshu'},{'$set':{'sex':'women'}},upsert=true,multi=false)//解释一下几个参数: 第一:查询的条件、 第二:更新的字段、 第三:如果不存在则插入 第四:是否允许修改多条记录
db. users.remove({'name':'xumingxiang'})//删除记录 如果remove方法里面不传入任何参数则删除所有数据 清除集合中的所有数据,但是不会删除集合本身以及关联的索引
db.users.find() //查找
细说上述update方法,上面update第三个参数是upsert,upsert操作就是说:如果我没有查到,我就在数据库里面新增一条,其实这样也有好处,就是避免了我在数据库里面判断是update还是add操作,使用起来很简单
默认情况下update方法是整体更新,如果需要局部更新,mongodb中已经给我们提供了两个修改器: $inc 和 $set。
$inc修改器也就是increase的缩写,
每次修改会在原有的基础上自增$inc指定的值,$inc修改符将匹配条件的文档的age键原子加一,缺省情况下只是更新第一条符合条件的文档。可以通过update函数的最后一个参数来指定更新所有符合条件的文档
$set修改直接修改匹配文档的内容,如果修改的键存在则直接修改,否则新增。$unset修改符合$set的功能是完全相反的
具体复杂点的操作见Mongo学习笔记数据操作
详述查找命令
上面例子中的findOne方法是查询出第一条语句。
一般的查询条件有and、or 、in、not in、not
db.person.find({"name":"jack","age":25})//相当于查询name="jack" and age=25
db.person.find({ $or: [{ "name": "jack", "age": 25 }] })//相当于查询name="jack" or age=25
db.person.find({ "name": { $in: ["jack", "joe"] } })//相当于查询name in("jack","joe")
和sql server不一样的是MongoDB的in list中的数据可以是不同类型。
db.person.find({ "name": { $nin: ["jack", "joe"] } })//相当于查询name not in("jack","joe")
db.person.find({ "$or": [{ "name": { "$in": ["jack", "joe"] } }, { "age": 25 }] })//如何混合使用$or和$in。
db.person.find({ "name": { "$not": { "$in": ["jack", "joe"] } } })//$not表示取反,等同于SQL中的not。
下面是查询的相关......
db.person.find({}, {"name":1})//返回指定的文档键值对。只是返回name的键值对。
db.person.find({}, {"name":0})//指定不返回的文档键值对。返回除name之外的所有键值对。
那如果需要查询一些特定条件的 事实上是可以用正则的,看下面的例子。
db.person.find({ "name": /^j/, "name": /e$/ });//查询name startwith 'j' and endwith 'e'
有些查询很复杂的话,$where派上用场了。
db.person.find({ $where: function () { return this.name == 'jack'; } })//查询name='jack'
下面说说比较运算符。
$lt/$lte/$gt/$gte/$ne,依次等价于</<=/>/>=/!=。(l表示less g表示greater e表示equal n表示not )
db.person.find({ "age": { "$gte": 18, "#lte": 40 } });//返回符合条件age >= 18 && age <= 40
db.person.find({ "name": { "$ne": "jack" } })//返回条件符合name != "jack"
我相信大家在查询数据的时候经常会碰到null,下面来说说null数据类型的查询吧
db.person.find({"name":null})//在进行值为null数据的查询时,所有值为null,以及不包含指定键的文档均会被检索出来。
db.person.find({"name": {"$in": [null], "$exists":true}})
//需要将null作为数组中的一个元素进行相等性判断,即便这个数组中只有一个元素。再有就是通过$exists判断指定键是否存在。
mongodb跟sqlserver数据查询还是有很大不相同的一部分的,最显著不一样的地方就是MongoDb中的数组数据查询。
具体来说说吧。现在假设我们数据库里面查询出来的数据如下图所示:
db.test.find({"fruit":"banana"})//数组中所有包含banana的文档都会被检索出来。
db.test.find({"fruit": {"$all": ["banana","apple"]}})//检索数组中需要包含多个元素的情况,这里使用$all。数组中必须同时包含apple和banana,但是他们的顺序无关紧要。
db.test.find({"fruit":["apple","banana","peach"]})//精确匹配,即被检索出来的文档,fruit值中的数组数据必须和查询条件完全匹配,即不能多,也不能少,顺序也必须保持一致。
db.test.find({"fruit.2":"peach"})//匹配数组中指定下标元素的值。数组的起始下标是0。 查看出fruit数组中第二个元素的值为peach
db.test.find({"fruit": {$size : 3}})//可以通过$size获取数组的长度,但是$size不能和比较操作符联合使用。就是说查询出fruit长度为3的...
上述的例子是查询fruit数组长度为3的,那如果需要查询长度大于3的应该怎么办呢
db.test.update({}, {"$set": {"size":3}},false,true)//只能是添加一个额外的键表示数据中的元素数据,在操作数据中的元素时,需要同时更新size键的值。
test.update({},{"$push": {"fruit":"strawberry"},"$inc":{"size":1}},false,true)//$inc每次添加一个新元素,都要原子性的自增size一次。
db.test.find({},{"fruit": {"$slice":2}, "size":0})//通过$slice返回数组中的部分数据。"$slice":2表示数组中的前两个元素。"$slice":-2表示数组中的后两个元素。$slice : [2,1],表示从第二个2元素开始取1个,如果获取数量大于2后面的元素数量,则取后面的全部数据。
大家都知道,MongoDB是由数据库 (database)、集合(collection)、文档对象(document)三个层次组成。当一个文档对象中包含另外多个文档对象的时候,应该怎么查询呢?
这时候$elemMatch就有用武之地了。
假设我们数据库里面数据如下图所示
db.person.find({"comments": {"$elemMatch": {"author":"joe","score":{"$gte":3}}}}
MongoDB系列二的更多相关文章
-
MongoDB系列二(介绍).
一.特点 学习一个东西,至少首先得知道它能做什么?适合做什么?有什么优缺点吧? 传统关系型数据库,遵循三大范式.即原子性.唯一性.每列与主键直接关联性.但是后来人们慢慢发现,不要把这些数据分散到多个表 ...
-
MongoDB 系列(二) C# 内嵌元素操作 聚合使用
"_id" : "639d8a50-7864-458f-9a7d-b72647a3d226","ParentGuid" : "00 ...
-
MongoDB系列二:MongoDB安装过程
一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...
-
MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
-
windows下mongodb基础玩法系列二CURD附加一
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
-
windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
-
MongoDB系列之二(主动复制)
目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...
-
mongoDB系列之(二):mongoDB 副本集
1. 什么是副本集 副本集就是mongoDB副本所组成的一个集群. 同期原理是,写操作发生在主库,从库同步主库的OpLog日志. 集群中没有特定的主库,主库是选举产生,如果主库down了,会再选举出一 ...
-
前端构建大法 Gulp 系列 (二):为什么选择gulp
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
随机推荐
-
web 前端(轮番插件)
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
-
sql语句-ALTER TABLE
在工作中常遇到要维护数据库表的列,这里主要介绍sql语句中的ALTER TABLE 语句.ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 如需在表中添加列,请使用下列语法: ALTE ...
-
Memcached驱动(C#)
using Memcached.ClientLibrary; using System; using System.Collections.Generic; using System.IO; usin ...
-
9、android开发之java.lang.verifyError(转载)
原文链接: http://www.linuxidc.com/Linux/2012-08/67289.htm 解决方案: 最近在做一个Android开发小项目的时候,遇到java.lang.verify ...
-
easyui 分页实现
1.用datagrid 做分页显示, 依据API样例,最终解决.废话不说,datagrid分页 有一个附加的分页控件 通过在datagrid中设置pagination:true 就会显示分页 当请求是 ...
-
Maven之——坐标和依赖(上)
Maven之--坐标和依赖(上) 1. Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到详细的构件.Maven的坐标元素包含groupId.artifactId.versi ...
-
grep命令参数和使用方法
功能说明:查找符合串的条件的文件. 语言 法国:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
-
SZU:B47 Big Integer II
Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Normal Descrip ...
-
Android Studio的使用(十三)--设置方法分割线
1.只需要在设置中选中show method separators 即可.
-
.Net语言 APP开发平台——Smobiler学习日志:在手机应用中开发蛛网表格
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Sm ...