MongoDB安装、CURD增改查删操作、应用场景
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。非关系型的数据存储
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB有数据库、集合、文档三个基本概念分别相当于关系数据库中的数据库、表、行。
一、MongoDB安装
MongoDB官网下载地址:https://www.mongodb.org/downloads

下载完成后点击mongodb-win32-x86_64-2008plus-ssl-3.2.0-signed.msi安装,傻瓜式下一步安装就可以,默认装到 C:\Program Files\MongoDB\Server\3.2\bin 下。
微软徽标+R,输入cmd如下命令:
”cd C:\Program Files\MongoDB\Server\3.2\bin“ --version 返回MongoDB shell version:3.2.0 说明安装成功。
在浏览器里面键入“http://localhost:27017/,出现如下界面,也说明安装成功。

安装成功后为了方便将mongodb的命令加入到环境变量PATH中
我的电脑-->右键-->属性;如下图:

正确添加后,cmd直接输入mongo --version 返回MongoDB shell version:3.2.0
二、创建数据目录、日志目录
MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它(data、db、log文件夹不创建会下面会报错,)。
数据目录:C:\Program Files\MongoDB\data\db
日志目录:C:\Program Files\MongoDB\log\log.txt
执行如下命令:
mongod --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\log.txt" --logappend
三、将MongoDB服务器作为Windows服务运行
执行如下命令:
mongod --dbpath "C:\Program Files\MongoDB\data\db" --logpath "C:\Program Files\MongoDB\log\log.txt" --logappend --directoryperdb --serviceName MongoDB --install
删除服务:mongod.exe --remove --serviceName "MongoDB"
作为Windows服务启动不了报错:Windows不能在本地计算机启动MongoDB,错误代码 100

解决方法 :
1、MongoDB安装目录\data\将此文件夹下的mongod.lock删除
2、检查设置数据目录dbpath或日志目录logpath是否正确
四、MongoDB的CURD操作
(-)命令操作
1、插入--cmd,输入mongo命令打开shell,使用testdb。文档必须是一个json的扩展(Bson)形式
db.person.insert({"name":"joye888","age":"25"})
db.person.insert({"name":"joye888","age":"26"})

2、查询-- “_id": 数据库加的GUID主键
db.person.find()

3、修改
update({查询条件},{需要修改的内容})

4、删除
db.person.remove({}) -- 删除所有
db.person.remove({"name":"joye888"})--根据条件删除

(二)非命令操作
构造bsonDcument插入
方式1,直接构造:
MongoServer dbserver = new MongoClient(connectionStr).GetServer();
MongoDatabase db = dbserver.GetDatabase(dbName);
MongoCollection collection = db.GetCollection(collectionName);
dbserver.Connect(); BsonDocument doc = new BsonDocument(); doc["Age"] = Int32.Parse(txt_Age.Text);
doc["Name"] = txt_Name.Text;
doc["Num"] = txt_Num.Text;
doc["Introduction"] = txt_Introduction.Text; collection.Insert(doc);
方式2,通过实体构造:
var student = new Student
{
Age = Int32.Parse(txt_Age.Text),
Name = txt_Name.Text,
Num = txt_Num.Text,
Introduction = txt_Introduction.Text
}; collection.Insert<Student>(student);
删除
关键就是构造删除条件,通过api查到Remove方法的签名:public virtual WriteConcernResult Remove(IMongoQuery query);在网上看到好多写法都是在Remove中传入BsonDocument对象,但是我查源码发现bsonDocument根本没有实现IMongoQuery接口,实现这个接口的是一个叫做QueryDocument的类,同时QueryDocument也继承了BsonDocument对象,而构造BsonDocument和QueryDocument的方式超级多,各种方便,简单写几种:
比如构造如下条件,delete from table where Age>15 &Age<20;
相应的mongodb条件写法:{Age:{$gt:15,$lt:20}},下面就来构造这个条件;
//方式1,直接通过bsonDocument构造: BsonDocument doc = new BsonDocument
{
{ "Age",new BsonDocument{{"$gte",},{"$lte",}}}
};
//方式2,直接通过QueryDocument构造:与1类似 QueryDocument query = new QueryDocument
{
{ "Age",new QueryDocument{{"$gte",},{"$lte",}}}
};
//方式3,直接通过反序列化json字符串: string json = "{ Age:{$gte:10,$lte:15}}";
var queryJson = BsonSerializer.Deserialize(json, typeof(BsonDocument)) as BsonDocument;
//个人觉得这种方式挺好,如果你mongodb命令熟悉,这种方式挺适合构造复杂条件的 //方式4:通过Query类,Query是静态类,封装了各种逻辑条件方法,有泛型和泛型两种方式: var query1 = Query.GT("Age", );//大于10;greater than 10
var query2 = Query.LT("Age", );//小于15;less than 15
var query = Query.And(query1, query2);
//但是更好的要数泛型方式了: var query1 = Query<Student>.GTE<Int32>(t => t.Age, );
var query2 = Query<Student>.LTE<Int32>(t => t.Age, );
//var query = Query.And(Query.GTE("Age", 10), Query.LTE("Age", 15));
var query = Query.And(query1, query2);
//最后执行Remove方法即可;
C#的驱动程序都有一个连接池,有效地使用连接到服务器。所以无需调用Connect 或者Disconnect;只要交给驱动处理即可(调用Connect 没什么影响,但是调用Disconnect 会关掉连接池所有连接)
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders; namespace ConsoleApplication1
{ public class Entity
{ public ObjectId Id { get; set; } public string Name { get; set; }
} class Program
{
static void Main(string[] args)
{ var connectionString = "mongodb://localhost"; var client = new MongoClient(connectionString); var server = client.GetServer(); var database = server.GetDatabase("test"); var collection = database.GetCollection<Entity>("entities"); var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; var query = Query<Entity>.EQ(e => e.Id, id);
entity = collection.FindOne(query); entity.Name = "Dick"; collection.Save(entity); var update = Update<Entity>.Set(e => e.Name, "Harry"); collection.Update(query, update); collection.Remove(query); }
}
}
五、MongoDB使用场景:
适合场景:
1、用于对象及JSON数据的存储
2、大尺寸、低价值的数据
3、缓存,比如考试的题库
4、日志数据
不使用的场景:
1、高度事物性的系统:银行系统
2、需要高度优化查询的数据
3、重要的数据
4、需要复杂SQL解决的问题
写个批处理,方便开启Mongodb服务器
@echo @pause mongod -repair -dbpath "E:\mongodbfiles" mongod -dbpath "E:\mongodbfiles" @pause
“mongod -repair -dbpath "E:\mongodbfiles"”是为了解决启动时有时会报错“Unclean shutdown detected mongodb”。
把它拷贝到记事本,保存为.bat文件,然后和mongod.exe放在同一个目录,双击它就OK了。
MongoDB安装、CURD增改查删操作、应用场景的更多相关文章
- php mysqli 链接数据库 CURD 增改查删
<?php function println($msg) { echo "<br>"; echo $msg; } $mysql_server_name = &qu ...
- mysql 中的增改查删(CRUD)
增改查删可以用CURD来表示 增加:create 修改:update 查找:read 删除:delete 增加create : insert +表名+values+(信息): in ...
- mongodb的安装与增删改查
mongodb是一款分布式的文件存储的数据库,注意这两个词,分布式和文件存储.mongodb支持复制和分片,可以合理的运用空间的大小,也可以达到容灾的目的.另外文件存储也是一个特点,抛弃了传统的表的概 ...
- MongoDB入门(介绍、安装、增删改查)
文章作者公众号bigsai,已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下! 课程导学 大家好我是bigsai,我们都学过数据库,但你可能更熟悉关系(型)数据库例如MySQL,SQL SERVE ...
- 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践
若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...
- 使用DOM进行xml文档的crud(增删改查)操作<操作详解>
很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...
- 利用koa实现mongodb数据库的增删改查
概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...
- 【基础篇】js对本地文件增删改查--删
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
- mysql增删改查相关操作
mysql增删改查相关操作 以前用mysql用的少,对于数据库相关的操作不熟悉,现在开始要接触数据库了,记录一下相关的基础操作吧. 1.数据库的授权操作 # mysql -u root -p Ente ...
随机推荐
- Codeforces 189A. Cut Ribbon
题目链接:http://codeforces.com/problemset/problem/189/A 题意: 给你一个长度为 N 的布条, 再给你三个长度 a, b , c.你可以用剪刀去剪这些布条 ...
- Codeforces Round 251 (Div. 2)
layout: post title: Codeforces Round 251 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- 14、Flask实战第14天:Flask使用SQLAlchemy
flask-sqlalchemy使用详解 之前我们用到的SQLAchemy是可以单独使用的,不需要用到Flask 如果我们在Flask框架中使用SQLAchemy,可以使用flask_sqlalche ...
- POJ 3068 "Shortest" pair of paths(费用流)
[题目链接] http://poj.org/problem?id=3068 [题目大意] 给出一张图,要把两个物品从起点运到终点,他们不能运同一条路过 每条路都有一定的费用,求最小费用 [题解] 题目 ...
- 扩展gridview轻松实现冻结行和列
在实际的项目中,由于项目的需要,数据量比较大,同时显示栏位也比较多,要做gridview里显示完整,并做到用户体验比较好,这就需要冻结表头和关键列.由于用到的地方比较多,我们可以护展一个gridvie ...
- 如何订阅Linux相关的邮件列表
转:http://blog.163.com/sunshine_linting/blog/static/44893323201282114012845/ 1.google"linux kern ...
- Ado.Net基础拾遗一:读取数据
从数据库中读取数据: 使用DataReader对象从数据库中读取数据 首先需要添加几个命名空间 //需要添加的命名空间 using System.Configuration; using System ...
- virtualenv、virtualenvwrapper安装和使用;Mac os的特殊性
[sudo] pip install virtualenv 或者[sudo] pip3 install virtualenv [sudo]可用可不用 pip/pip3 install virtuale ...
- IIS5/6/7 ASP.net 请求处理过程
tks:http://www.cnblogs.com/TomXu/p/3756774.html 主要内容 本文讲解的是:服务器接受Http Request请求之后,是如何进入.Net CLR,从而进一 ...
- Laravel 5系列教程六:表单 Forms
免费视频教程地址https://laravist.com/series/laravel-5-basic 在开始之前,我们把界面先美化一点点先: 首先到https://github.com/JellyB ...