MongoDB的增删该查
1.增
增加操作是最简单的,构造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
删 关键就是构造删除条件,通过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",10},{"$lte",15}}} };
方式2,直接通过QueryDocument构造:与1类似 QueryDocument query = new QueryDocument {
{ "Age",new QueryDocument{{"$gte",10},{"$lte",15}}}
};
方式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);//大于10;greater than 10 var query2 = Query.LT("Age", 15);//小于15;less than 15 var query = Query.And(query1, query2);
但是更好的要数泛型方式了: var query1 = Query
最后执行Remove方法即可;
查
数据显示是必不可少的,查询操作中的条件过滤在删除中已说过,不再赘述,这里先写两种方式(ps:现在了解太浅,只能以笔记形式记录下)
方式1:通过FindAllAs方式或者FindAs方法 var query1 = Query
var list = collection.FindAs(typeof(Student), query);
方式2:通过linq var qList = (from c in collection.AsQueryable
where c.Age > 10 && c.Age < 15
select c).ToList();
MongoDB中数据的基本单元叫文档,采用json的键值的方式。多个键及其关联的值有序的 存放在一起变是文档。类似于编辑语言中的键值关系。MongoDB文档都是BSON文档,他是一个json 的二进制形式。 MongoDB的文档
{ name: "sue", agel:26, status:"A", groups:["news","sports"] }
MongoDB中文档被存储在集合中。集合是一组有关系索引的文档。集合类似于关系数据中的表。 MongoDB的集合 { name:"al", age:18, status:"D", groups:["politics","news"] }
Collection
2.1方法参考 名称: 说明 cusor.count() 返回游标中的文档的数量 cusor.explain() 报告的查询执行计划,包括索引使用的游标。
cursor.hint() 若要使用查询的特定索引的部队MongoDB。
cursor.limit() 约束游标的结果集的大小
cusor.next() 返回游标中的下一个文档
cursor.skip() 返回一个游标,开始传递或跳过的一些文件后才返回结果
cursor.sort() 返回结果排序根据排序的规范
cursor.toArray() 返回一个数组,包含由光标返回的所有文档。
db.collection.insert() 在集合中创建一个新文档。
db.collection.save() 提供insert()和update()插入新文件的包装
db.collection.update() 修改集合中的文档。
db.collection.find() 集合上执行查询,并返回一个游标对象。 db.collection.findOne() 执行查询,并返回一个单独的文档,
db.collection.remove() 从集合中删除的文件
db.collection.count() 执行计算集合或匹配查询中返回的文档数的计算。
db.collection.distinct() 返回一个数组没有指定的字段不重复的文件。
Insert() db.collection.find(.)
db.collection.findOne(,)
Criteria -类型:文档;可选,文档的查询过滤条件
projection 类型:文档,对结果进行字段匹配,{field1:,field2...} 后面还可以:Sort()排序,limit()限制个数,Skip()起始点。 db.collection.find(,)返回集合
Express 框架
npm 提供了大量的第三方模块,其中不乏许多 Web 框架,我们没有必要重复发明轮子,
因而选择使用 Express 作为开发框架,因为它是目前最稳定、使用最广泛,而且 Node.js 官
方推荐的唯一一个 Web 开发框架。
Express ( http://expressjs.com/ ) 除了为 http 模块提供了更高层的接口外,还实现了 许多功能,其中包括:
路由控制;
模板解析支持;
动态视图;
用户会话;
CSRF 保护;
静态文件服务;
错误控制器;
访问日志;
缓存;
插件支持。
需要指出的是,Express 不是一个无所不包的全能框架,像 Rails 或 Django 那样实现了
模板引擎甚至 ORM (Object Relation Model,对象关系模型)。它只是一个轻量级的 Web 框
架,多数功能只是对 HTTP 协议中常用操作的封装,更多的功能需要插件或者整合其他模块 来完成。
下面用 Express 重新实现前面的例子:
var express = require('express');
var app = express.createServer();
app.use(express.bodyParser());
app.all('/', function(req, res) {
res.send(req.body.title + req.body.text);
});
app.listen(3000);
可以看到,我们不需要手动编写 req 的事件监听器了,只需加载
express.bodyParser()
就能直接通过 req.body 获取 POST 的数据了。
首先我们导入了 Express 模块,前面已经通过 npm 安装到了本地,在这里可以直接通过
require 获取。routes 是一个文件夹形式的本地模块,即./routes/index.js,它的功能
是为指定路径组织返回内容,相当于 MVC 架构中的控制器。通过 express.createServer()
函数创建了一个应用的实例,后面的所有操作都是针对于这个实例进行的。
接下来是三个 app.configure 函数,分别指定了通用、开发和产品环境下的参数。
第一个 app.configure 直接接受了一个回调函数,后两个则只能在开发和产品环境中调用。
app.set 是 Express 的参数设置工具,接受一个键(key)和一个值(value),可用的参
数如下所示。
basepath:基础地址,通常用于 res.redirect() 跳转。
views:视图文件的目录,存放模板文件。
view engine:视图模板引擎。
view options:全局视图参数对象。
view cache:启用视图缓存。
case sensitive routes:路径区分大小写。
strict routing:严格路径,启用后不会忽略路径末尾的“ / ”。
jsonp callback:开启透明的 JSONP 支持。
Express 依赖于 connect,提供了大量的中间件,可以通过 app.use 启用。app.configure
中启用了5个中间件:bodyParser、methodOverride、router、static 以及 errorHandler。
bodyParser 的功能是解析客户端请求,通常是通过 POST 发送的内容。methodOverride
用于支持定制的 HTTP 方法①。router 是项目的路由支持。static 提供了静态文件支持。
errorHandler 是错误控制器。
app.get('/', routes.index); 是一个路由控制器,用户如果访问“ / ”路径,则 由 routes.index 来控制。
最后服务器通过 app.listen(3000); 启动,监听3000端口。