MongoDB数据库 基础知识

来源:互联网 发布:mac如何输入大写字母 编辑:程序博客网 时间:2024/06/06 09:51

1.简介:

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

2.特点:

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。
模式自由,支持动态查询,支持完全索引,包含内部对象。支持查询。支持复制和故障恢复。使用高效的二进制数据存储,包括大型对象(如视频等)。自动处理碎片,以支持云计算层次的扩展性。支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。文件存储格式为BSON(一种JSON的扩展)。可通过网络访问。
具体介绍可以查看百度百科:
http://baike.baidu.com/subview/3385614/9338179.htm#viewPageContent

3.使用:

(1)安装:下载地址:https://www.mongodb.org/downloads,下载适合自己的开发环境的压缩包,加压后直接安装就可以了,很简单;
(2)创建仓库、日志、新建服务:在安装目录下创建两个文件夹db、log;在cmd中输入以下命令创建仓库、日志、新建服务:
mongod -dbpath “D:\study soft\MongoDB\db” -logpath “D:\study soft\MongoDB\log\mongodb.log” -install -serviceName “MongoDB”
(3)使用mongoVUE工具:
下载安装(不做介绍了)后,要创建连接,一般只需要写Name(连接名)和Server(地址:localhost或127.0.0.1)就好了:
创建连接
创建好后如图:
这里写图片描述

(4)基本命令:
—–创建集合:
db.createCollection(“集合名”);
—– 删除集合:
db.集合名.drop();
—– 切换集合:
use 集合名;
—– 添加记录:
db.集合名.insert({“_id”:1001,”name”:”yyy”,”sex”:”F”});
—–向集合中添加多条记录
db.集合名.insert([{“_id”:1003,”name”:”天ss天”,”sex”:”男”},{“_id”:1004,”name”:”tt”,”sex”:”男”}]);
—– 查看集合中的数据:

    db.集合名.find()    db.集合名.findOne()    db.集合名.find({"_id":1001})      ---where key=val    db.集合名.find({"_id":{"gt":1001}})     ---where key>val    db.集合名.find({"_id":{"$lte":1001}})     ---where key<=val    db.集合名.find({"_id":{"$ne":1001}})     ---where key!=val

—- $in 在…..中

    db.集合名  .find({"_id":{"$in":[1001,1002,1003]}})

—- $or 或

     db.集合名.find({"$or":[{"_id":1001},{"name":"haha"}]})

—-$and and or 并且….或…..(性别为男 并且 id为1009 或者姓名为 yc)

    db.zy.find({"sex":"男","$or":[{"_id":1009},{"name":"yc"}]})

—– 如果存在则修改,不存在则添加
db.集合名.save({“_id”:1003,”name”:”haha”});
—– 修改
db.集合名.update({条件},{要修改的数据});

—— 修改器
$inc 增加对应的值

    db.zy.insert({"_id":1004,"url":"www.baidu.com","pageViews":1});    db.zy.update({"_id":1004},{"$inc":{"pageViews":1}});        --将id为1004的文档中的pageViews键的值增加1

$set 修改对应的值

     db.zy.update({"_id":1002},{"name":"明明","sex":"女"})     db.zy.update({"_id":1002},{"$set":{"name":"明明","sex":"男"}})

—- 将company变成一个数组

    db.zy.insert({"_id":1005,"company":"yc","url":"www.baidu.com","pageViews":1});    db.zy.update({"_id":1005},{"$set":{"company":["yc","zy","nh"]}})

—删除键:

    db.zy.update({"_id":1005},{"$unset":{"company":1}})

—数组修改器:
$push 向数组中添加值,可能会出现重复的值

     db.zy.update({"_id":1005},{"$push":{"company":"hhh"}})

$each 循环添加

    db.zy.update({"_id":1005},{"$push":{"company":{"$each":["aa","bb","cc"]}}})

$slice 指定最大的长度,它的值必须是负数,表示保留最后的n个值

    db.zy.update({"_id":1005},{"$push":{"company":{"$each":["aa1","bb2","cc3"],"$slice":-10}}})

$pop 从数组中删除一个元素 key : 1 从数据末尾开始删 key : -1 从头部开始删

     db.zy.update({"_id":1005},{"$pop":{"company":1}})

$pull 从数组中删除匹配的值

     db.zy.update({"_id":1005},{"$pull":{"company":"nh"}})

—-循环

 for( i=0;i<10;i++){        db.zy.insert({"_id":i,"name":i})    }  

注:当不插入_id时,mongodb会自动分配一个ObjectId
—-游标

    var cursor =db.zy.find();    var obj;    while(cursor .hasNext()){        obj=cursor.next();        print(obj);    };    var cursor =db.zy.find();    cursor .forEach(function(x){        print(x);    })

–分页查询

 db.zy.find().limit(3);  ---查前3条 db.zy.find().limit(3).skip(3);  ---跳过前3条,查后面的3条

–排序

    db.zy.find().sort({"_id":-1})       ---    1为升序   -1 为降序    db.zy.find().sort({"_id":-1,"name":1})   ---第一个相同就按第二个排序

eg:

    db.zy.insert({        "_id":1006,        "content":"今天天气怎么样??",        "comments":[            {"comment":"好","count":0},            {"comment":"很好","count":0},            {"comment":"非常好","count":0},        ]    })

—-通过数组下标访问

 db.zy.update({"_id":1006},{"$inc":{"comments.1.count":1}}) db.zy.update({"comments.comment":"很好"},{"$inc":{"comments.$.count":1}})  ----匹配所有的“很好”,让其对应的count+1 db.zy.update({"comments.comment":"非常好"},{"$set":{"comments.$.comment":"超级好"}})  ----匹配所有的“非常好”,让其对应的值变为超级好

—-MongoDB默认每次修改只修改一个文档,如果需要改多条满足的记录,需要在后面添加条件{multi:true}

 db.zy.update({"comments.comment":"很好"},{"$inc":{"comments.$.count":1}},{multi:true}) db.zy.update({"comments.comment":"很好"},{"$inc":{"comments.$.count":1}},false,true)

(5).数据类型:
null:{“x”:null}
boolean: {“x”:true}
数值: {“x”:3.14} {“x”:3} NumberInt(“3”) NumberLong(“3”)
字符串:{“x”:”hello”}
日期:{“x”:new Date()}
正则表达式:{“x”:/hello/ig}
数组:{“x”:[1,2,3]}
内嵌文档:{“x”:{“foo”:{bar}}}
对象id: {“x”:ObjectId()}
代码:{“x”:function(){} }

0 0