PCB C# MongoDB 查询(SQL,NOSQL,C#对比)

 一.准备阶段

         1.查询数据清单准备

         

        2.这里先将SQL语句执行顺序列出来,方便后面语句对比更好理解

(8)SELECT
(9)DISTINCT  
(11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)             ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>

二.查询全表

       1. SQL:

select * from ppeflow

       2. MongoDB NO SQL:

 db.ppeflow.find() 

      3. MongoDB  C#

      IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
      FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter;   //创建过滤
      FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
      var resultList = ppeflows.Find(filter).ToList();//获取集合

三.查询数据总数

       1. SQL:

select count(1) from ppeflow

       2. MongoDB NO SQL:

db.ppeflow.find({}).count()

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
var result = ppeflows.CountDocuments(filter); //获得集合数量

四.查询并排序

       1. SQL:

select * from ppeflow order by orderid
select *from ppeflow order by orderid desc 

       2. MongoDB NO SQL:

db.ppeflow.find().sort({'orderid':1})
db.ppeflow.find().sort({'orderid':-1})

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
var builderSort = Builders<ppeflow>.Sort.Ascending(t => t.orderid); //创建排序
var resultList = ppeflows.Find(filter).Sort(builderSort).ToList();//获取集合

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库

FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过

FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空

var resultList = ppeflows.Find(filter).SortByDescending(t => t.orderid).ToList();//获取集合

五.查询TOP前10条记录

       1. SQL:

select top 10 * from ppeflow

       2. MongoDB NO SQL:

db.ppeflow.find().limit(10)

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
var resultList = ppeflows.Find(filter).Limit(10).ToList();//获取集合

六.查询从第6条到第10条记录(即:跳过前5条记录起的后5条记录)

       1. SQL:

select * from ppeflow limit 5,5          

       2. MongoDB NO SQL:

db.ppeflow.find().skip(5).limit(5)

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
var resultList = ppeflows.Find(filter).Skip(5).Limit(5).ToList();//获取集合

.查询distinct去除重复字段

       1. SQL:

select DISTINCT techname from ppeflow

       2. MongoDB NO SQL:

db.ppeflow.distinct('techname')

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Empty;//过滤为空
var resultList = ppeflows.Distinct(tt => tt.techname, filter).ToList();//获取集合

八.查询Group by分组

       1. SQL:

select techname,count(1) as total from ppeflow group by techname

       2. MongoDB NO SQL:

db.ppeflow.group({
key:{
"techname":true}
,initial: {techname:
'',total: 0}
,reduce:
function(doc, out)
{
out.techname = doc.techname;
out.total += doc.orderid;
}
})

      3. MongoDB  C#  

            //待完善

九.查询条件>,>=,<,<=

       1. SQL:

select techname from ppeflow where orderid > 10
select techname from ppeflow where orderid >= 10
select techname from ppeflow where orderid < 10
select techname from ppeflow where orderid <= 10

       2. MongoDB NO SQL:

db.ppeflow.find({'orderid':{$gt:10}})

db.ppeflow.find({'orderid':{$gte:10}})

db.ppeflow.find({'orderid':{$lt:10}})

db.ppeflow.find({'orderid':{$lte:10}})

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
FilterDefinition<ppeflow> filter = builderFilter.Where(t => t.orderid > 10); ;//过滤条件  改为对应的>=,<,<= 
var resultList = ppeflows.Find(filter).ToList();//获取集合

十.查询条件in等于其实中任意一个

       1. SQL:

select techname from ppeflow where orderid  in (10,11,12)

       2. MongoDB NO SQL:

db.ppeflow.find({'orderid':{$in:[10,11,12]}})

      3. MongoDB  C#  

IMongoCollection<ppeflow> ppeflows = db.GetCollection<ppeflow>("ppeflow");//指定数据库
FilterDefinitionBuilder<ppeflow> builderFilter = Builders<ppeflow>.Filter; //创建过滤
var list1 = new List<int> { 10, 11, 12 };
var filter = builderFilter.Where(tt => list1.IndexOf(tt.orderid)>-1); //in 条件
var resultList = ppeflows.Find(filter).ToList();//获取集合

猜你喜欢

转载自www.cnblogs.com/pcbren/p/9539543.html