Mongodb-C#
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
特点 | 描述 |
存储方式 | 虚拟内存+持久化 |
数据结构 | key=>value |
查询语句 | mongodb自有的查询方式 |
使用场景 | 事件消息记录,内容管理或者博客平台 |
数据处理 |
数据是存储在硬盘上的,只不过需要 经常读取的数据会被加载到内存中, 将数据存储在物理内存中, 从而达到高速读写 |
架构特点 | 通过副本集,以及分片来实现高可 |
MongoDB VS SQL:
SQL术语 | MongoDB术语 | 解释 |
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 列/字段 |
index | index | 索引 |
primary key | primary key | 主键 |
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("foo"); // 没有此数据库,则会自动创建
var collection = database.GetCollection<BsonDocument>("bar"); // 没有此表,则会自动创建
var document = new BsonDocument {
{"name", "MongoDB" },
{"type", "Database" },
{"count", 3 },
{"info", new BsonDocument
{
{"x", 203 },
{"y", 102 }
}
}
};
// 增加一条数据
collection.InsertOne(document);
// 增加多条数据
var res = collection.insertMany([{“b”: 3}, {‘c’: 4}]) var docs = Enumerable.Range(0, 100).Select(x => new BsonDocument("count", x)); collection.InsertMany(docs);
// 查询条件
Query.All("name", "a", "b");//通过多个元素来匹配数组
Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
Query.EQ("name", "a");//等于 Query.Exists("type", true);//判断键值是否存在
Query.GT("value", 2);//大于> Query.GTE("value", 3);//大于等于>=
Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
Query.LT("value", 9);//小于<
Query.LTE("value", 8);//小于等于<=
Query.Mod("value", 3, 1);//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
Query.NE("name", "c");//不等于 Query.Nor(Array);//不包括数组中的值
Query.Not("name");//元素条件语句
Query.NotIn("name", "a", 2);//返回与数组中所有条件都不匹配的文档
Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
Query.Size("name", 2);//给定键的长度 Query.Type("_id", BsonType.ObjectId );//给定键的类型
对数据排序:Sort,Desceding,Ascending
// 对count字段排序 var filterSort =Builders<BsonDocument>.Filter.Exists("count");
// 降序排列 var sort =Builders<BsonDocument>.Sort.Descending("count");
// 升序排列 var sort = Builders<BsonDocument>.Sort.Ascending("count");
var sortTes = collection.Find(filterSort).Sort(sort).ToList();
// 取出部分字段: 排除主键ID var projection = Builders<BsonDocument>.Projection.Exclude("_id");
// 取出name与type字段,排除主键_id var projection = Builders<BsonDocument>.Projection.Exclude("_id").Include("name").Include("type"); var doc = collection.Find(new BsonDocument()).Project(projection).ToList();
// 更新: 更新一条数据:将count=8的数据改成count=3 var filterData = Builders<BsonDocument>.Filter.Eq("count", 8); var updated = Builders<BsonDocument>.Update.Set("count", 3);
//var reslult = collection.UpdateOne(filterData, updated);
// 更新: 更新多条数据:将count<3.1的数据增加5 var filters = Builders<BsonDocument>.Filter.Gt("count", 3.1); var updatedData = Builders<BsonDocument>.Update.Inc("count", 5); var resultData = collection.UpdateMany(filters, updatedData);
// 删除: 删除一条数据 var filterDel = Builders<BsonDocument>.Filter.Eq("count", 4); var resultDel = collection.DeleteOne(filterDel);
// 删除: 删除多条数据 var filterDels = Builders<BsonDocument>.Filter.Eq("count", 3.1); var resultDels = collection.DeleteMany(filterDel);