C# MongoDB 查询,分组,聚合,排序,条件,分页
先下载个C#的驱动。MongoDB提供各种主流与非主流预言的开发驱动。
C# Driver 下载地址:这里
CSharp Driver Tutorial:这里
下载文件安装或者解压缩包
如果您是安装,请到安装位置寻找,如果是ZIP压缩包,解压缩包得到如下两个文件:
- MongoDB.Bson.dll :序列化、Json相关
- MongoDB.Driver.dll :我们的驱动
没了,只有这两个文件是我们的最爱。
有帮助点推荐
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySteel.Common.Helper;
using MongoDB.Driver.Builders;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson; namespace Test.MongoDB
{
class Program
{
/// <summary>
/// 数据库连接
/// </summary>
private const string conn = "mongodb://192.168.200.184:27017";
/// <summary>
/// 指定的数据库
/// </summary>
private const string dbName = "mlog";
/// <summary>
/// 指定的表
/// </summary>
private const string tbName = "log_table";
//创建数据连接
private static MongoServer server = MongoServer.Create(conn);
//获取指定数据库
private static MongoDatabase db = server.GetDatabase(dbName); static void Main(string[] args)
{
//for (var index = 0; index < 2; index++)
//{
// Student stu = new Student();
// stu.Name = "name" + index;
// stu.Age = index;
// stu.CreateDateTime = DateTime.Now.ToMillisecond();
// stu.Ques = new List<Ques>();
// stu.Ques.Add(new Ques() { Name = "qname" + index });
// Add(stu);
//}
Console.WriteLine("获取学生数据列表");
var list = GetStudentList();
foreach (var item in list)
{
Console.WriteLine(item.Name + " " + item.Age);
}
Console.WriteLine("获取学生姓名分组和数量");
Dictionary<string, int> group = GetStudentGroup();
foreach (var item in group)
{
Console.WriteLine(item.Key + " " + item.Value);
}
Console.Read();
}
/// <summary>
/// 添加
/// </summary>
/// <param name="text">内容</param>
/// <param name="articleId">文章ID</param>
/// <param name="channelId">频道ID</param>
/// <returns></returns>
public static void Add(Student t)
{
//获取表
MongoCollection col = db.GetCollection(tbName);
//插入
col.Insert(t); }
public static List<Student> GetStudentList()
{
//创建数据连接
MongoServer server = MongoServer.Create(conn);
//获取指定数据库
MongoDatabase db = server.GetDatabase(dbName);
//获取表
MongoCollection<Student> col = db.GetCollection<Student>(tbName);
//条件查询
var query = Query.And(Query.LTE("Age", ));
MongoCursor<Student> mongoCursor = col.FindAs<Student>(query);
//总数
Console.WriteLine(mongoCursor.Count());
mongoCursor = col.FindAs<Student>(query);
//排序
mongoCursor.SetSortOrder(SortBy.Descending("Age"));
//分页
mongoCursor.SetSkip();
mongoCursor.SetLimit();
List<Student> result = mongoCursor.ToList();
return result;
}
public static Dictionary<string, int> GetStudentGroup()
{
Dictionary<string, int> result = new Dictionary<string, int>();
result["num"] = ;
//创建数据连接
MongoServer server = MongoServer.Create(conn);
//获取指定数据库
MongoDatabase db = server.GetDatabase(dbName);
//获取表
MongoCollection<Student> col = db.GetCollection<Student>(tbName);
GroupByBuilder groupbyBuilder = new GroupByBuilder(new string[] { "Name" });
var query = Query.And(Query.LTE("Age", ));
var result_R = col.Group(query, groupbyBuilder, BsonDocument.Create(result), BsonJavaScript.Create("function(doc,prev){prev.num++;}"),
BsonJavaScript.Create("function(doc){ doc.count=doc.num;delete doc.num; }")).ToList();
if (result_R.Count != )
{
result = new Dictionary<string, int>();
for (int i = ; i < result_R.Count; i++)
{
result.Add(result_R[i]["Name"].ToString(), Convert.ToInt32(result_R[i]["count"])); }
}
return result;
}
}
[BsonIgnoreExtraElements]
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public List<Ques> Ques { get; set; }
public long CreateDateTime { get; set; }
}
[BsonIgnoreExtraElements]
public class Ques
{
public string Name { get; set; }
}
}
C# MongoDB 查询,分组,聚合,排序,条件,分页的更多相关文章
- mysql特殊查询----分组后排序
使用的示例表 学生表----student 表结构 数据 查询方法 一.第一种方法 我认为这是比较传统,比较容易理解的一种方式,使用自连接,并在连接条件中作比较,之后再对查询条件分组统计,排序. se ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es
今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...
- oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件
[本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...
- mongo 过滤查询条件后分组、排序
描述:最近业主有这么一个需求,根据集合中 时间段进行过滤,过滤的时间时间段为日期类型字符串,需要根据某一日期进行截取后.进行分组,排序 概述题目:根据createTime时间段做查询,然后以 天进行分 ...
- 【mongoDB查询进阶】聚合管道(二) -- 阶段操作符
https://segmentfault.com/a/1190000010826809 什么是管道操作符(Aggregation Pipeline Operators) mongoDB有4类操作符用于 ...
- 【mongoDB查询进阶】聚合管道(一) -- 初识
https://segmentfault.com/a/1190000010618355 前言:一般查询可以通过find方法,但如果是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你 ...
- MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程
MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- BNU OJ 50998 BQG's Messy Code
#include <cstdio> #define _(l) int l #define ___(l,L) for (_(o)=0,x=l o*2;o<x;o++)O= L o; # ...
- [iOS]C语言技术视频-09-枚举的定义
下载地址: 链接: http://pan.baidu.com/s/1o625Ee2 密码: 8kp5
- [转] Eclipse中已安装的插件如何卸载
转自 : http://blog.csdn.net/macong01/article/details/7631105 最近在Eclipse中安装了一个插件,导致Eclipse使用的时候有些问题,就找了 ...
- 关于NSNumber对C语言字符串的简写
2.关于NSNumber对C语言字符的简写 - 简写:对字符串进行操作返回的是NSString类型 NSLog(@"%@", @("purple")); > ...
- 控制流之while
while语句只要在一个条件为真的情况下,while语句允许你重复执行一块语句.while语句是所谓 循环 语句的一个例子.while语句有一个可选的else从句.使用while语句~~~~~~~~~ ...
- 【转】C/CPP之static
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...
- 14个华丽的javascript图表资源和插件
最近我分享一许多css/jquery 有用的资源,这里我将介绍一些用于构建华丽图表的javascript资源和插件,图表是展示数据最有效的方式. 建立一张图表有很多不同的方法,比如falsh.java ...
- Linux之文件备份与恢复
文件备份与恢复 1.dump命令 dump命令用于备份ext2或者ext3文件系统.可将目录或整个文件系统备份至指定的设备,或备份成一个大文件. 语法 dump(选项)(参数) 选项 -0123456 ...
- css清除浮动大全,共8种方法
我看的网页的网址:http://hi.baidu.com/kongcheng2012/item/2b1250d4452e802538f6f705 为什么浮动这么难? 因为浮动会使当前标签产生向上浮的效 ...
- java系列--并发
1.Executor 原博:http://blog.csdn.net/linghu_java/article/details/17123057 2.CountDownLatch()方法 浅析Java中 ...