1.构造实体类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EM.Model
{
public class News
{
public string _id { get; set; }
public string title { get; set; }
public string url { get; set; }
public string author { get; set; }
public int vote_count { get; set; }
public List<string> tags { get; set; }
public image image { get; set; }
public List<comments> comments { get; set; }
public DateTime createTime { get; set; }
public DateTime updateTime { get; set; }
}
public class image
{
public string url { get; set; }
public string caption { get; set; }
public string type { get; set; }
public string size { get; set; }
public string data { get; set; }
}
public class comments
{
public int userId { get; set; }
public string user { get; set; }
public string text { get; set; }
public DateTime createTime { get; set; }
public DateTime updateTime { get; set; }
} }

2.增加一条记录

             News news = new News();
news._id = Guid.NewGuid().ToString();
news.title = "大新闻";
news.url = "http://www.cnblogs.com/cnki/";
news.author = "沐风";
news.vote_count = ;
List<string> tagsList = new List<string>() { "国际", "编程", "dota" };
news.tags = tagsList;
image img = new image();
img.url = "http://www.cnblogs.com/cnki/";
img.caption = "好图";
img.type = "回忆录";
img.size = "3M";
img.data = "dota三人组";
news.image = img; List<comments> commentsList = new List<EM.Model.comments>();
comments comment1 = new comments();
comment1.userId = ;
comment1.user = "三生石";
comment1.text = "你所有的努力,只是为了更好的衬托别人的成功。";
comment1.createTime = DateTime.Now;
comment1.updateTime = DateTime.Now;
commentsList.Add(comment1); comments comment2 = new comments();
comment2.userId = ;
comment2.user = "影魔";
comment2.text = "明明可以靠脸吃饭,他却偏要靠才华,最后还是饿死了。";
comment2.createTime = DateTime.Now;
comment2.updateTime = DateTime.Now;
commentsList.Add(comment2); news.comments = commentsList; news.createTime = DateTime.Now;
news.updateTime = DateTime.Now; bool b = MongoDBServiceFactory.CreateMongoDBService(conStrNo, databaseName).Insert<News>("News", news);

存入MongoDB后的单条集合格式

{
"_id" : "95565797-8572-4281-b6e6-6820d0c8dc37",
"title" : "大新闻",
"url" : "http://www.cnblogs.com/cnki/",
"author" : "沐风",
"vote_count" : ,
"tags" : [
"国际",
"编程",
"dota"
],
"image" : {
"url" : "http://www.cnblogs.com/cnki/",
"caption" : "好图",
"type" : "回忆录",
"size" : "3M",
"data" : "dota三人组"
},
"comments" : [
{
"userId" : ,
"user" : "三生石",
"text" : "你所有的努力,只是为了更好的衬托别人的成功。",
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
},
{
"userId" : ,
"user" : "影魔",
"text" : "明明可以靠脸吃饭,他却偏要靠才华,最后还是饿死了。",
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
}
],
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
}

增加一条评论

             comments commentsInfo = new comments();
commentsInfo.userId = ;
commentsInfo.user = "mf";
commentsInfo.text = "世界太美好";
commentsInfo.createTime = DateTime.Now;
commentsInfo.updateTime = DateTime.Now;
var update = Builders<News>.Update.Push(m => m.comments, commentsInfo);
bool bUpdateOne = MongoDBServiceFactory.CreateMongoDBService(conStrNo, databaseName).UpdateOne<News>("News", m => m._id == "95565797-8572-4281-b6e6-6820d0c8dc37", update);

结果

 {
"_id" : "95565797-8572-4281-b6e6-6820d0c8dc37",
"title" : "大新闻",
"url" : "http://www.cnblogs.com/cnki/",
"author" : "沐风",
"vote_count" : ,
"tags" : [
"国际",
"编程",
"dota"
],
"image" : {
"url" : "http://www.cnblogs.com/cnki/",
"caption" : "好图",
"type" : "回忆录",
"size" : "3M",
"data" : "dota三人组"
},
"comments" : [
{
"userId" : ,
"user" : "三生石",
"text" : "你所有的努力,只是为了更好的衬托别人的成功。",
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
},
{
"userId" : ,
"user" : "影魔",
"text" : "明明可以靠脸吃饭,他却偏要靠才华,最后还是饿死了。",
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
},
{
"userId" : ,
"user" : "mf",
"text" : "世界太美好",
"createTime" : ISODate("2016-12-05T13:44:16.831Z"),
"updateTime" : ISODate("2016-12-05T13:44:16.832Z")
}
],
"createTime" : ISODate("2016-12-05T13:40:46.142Z"),
"updateTime" : ISODate("2016-12-05T13:40:46.142Z")
}

3.查询一条记录

 News news = MongoDBServiceFactory.CreateMongoDBService(conStr, databaseName).Single<News>("News", m => m.author == "沐风");

4.更新一条记录

a.支持数增加1

 var updateDef = Builders<News>.Update.Inc(x => x.vote_count, 1);
bool update = MongoDBServiceFactory.CreateMongoDBService(conStr, databaseName).UpdateOne<News>("News", x => x._id == "95565797-8572-4281-b6e6-6820d0c8dc37", updateDef);

b.修改Title字段

 var update = Builders<News>.Update.Set(m => m.title, "好大的新闻");
bool updateResult = MongoDBServiceFactory.CreateMongoDBService(conStr, databaseName).UpdateOne("News", x => x._id == "95565797-8572-4281-b6e6-6820d0c8dc37", update);

c.根据userId更新一条子评论的comments字段

             //找到子文档
var a = Builders<News>.Filter.Eq(x => x._id, "95565797-8572-4281-b6e6-6820d0c8dc37");
var b = Builders<News>.Filter.ElemMatch(x => x.comments, y => y.userId == );
var filter = Builders<News>.Filter.And(new FilterDefinition<News>[] { a, b });
//更新子文档的字段
var field = new StringFieldDefinition<News, string>("comments.$.comments");
var update = Builders<News>.Update.Set(field, "修改后的我");
//更新库
UpdateResult updateResult = MongoDBServiceFactory.CreateMongoDBService(conStrNo, databaseName).DocumentUpdate("News", filter, update);
bool bupdateResult= updateResult != null && updateResult.ModifiedCount > && updateResult.ModifiedCount == updateResult.MatchedCount ? true : false;

5.删除

 bool delete = MongoDBServiceFactory.CreateMongoDBService(conStr, databaseName).Delete<News>("News", x => x._id == "95565797-8572-4281-b6e6-6820d0c8dc37") > 0;

  

MongoDB探索之路(二)——系统设计之CRUD的更多相关文章

  1. [MongoDB]MongoDB与JAVA结合使用CRUD

    汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...

  2. MongoDB(二)-- Java API 实现增删改查

    一.下载jar包 http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 二.代码实现 package com.xbq.mongo ...

  3. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  4. Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD

    一. 在python脚本中, 我们通常可以使用pymongo模块实现与mongodb数据库的交互, 但是在使用Django框架进行定制开发的web server 项目中, 仍然使用pymongo模块的 ...

  5. 玩转mongodb(二):mongodb基础知识

    常用基本数据类型: null null用于表示空值或者不存在的字段: {"data":null} 布尔型 布尔类型只有两个值,true和false: {"data&quo ...

  6. NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具

    业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装  NoSQL Manager for MongoDB 可 ...

  7. MongoDB之二基础入门(安装启动)

    mongodb中有三元素:数据库,集合,文档,其中“集合” 就是对应关系数据库中的“表”,“文档”对应“行”. 一. 下载 上MongoDB官网 ,我们发现有32bit和64bit,这个就要看你系统了 ...

  8. MongoDB之二(增删查改)

    一: Insert操作 上一篇也说过,文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value 可能是“字符串”,可能是“数组” ...

  9. spring集成mongodb封装的简单的CRUD

    1.什么是mongodb         MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB是一个介 ...

随机推荐

  1. Jq_$.getJSON( )

    jQuery中的$.getJSON( )方法函数主要用来从服务器加载json编码的数据,它使用的是GET HTTP请求.使用方法如下: $.getJSON( url [, data ] [, succ ...

  2. 深入了解Kubernetes REST API的工作方式

    关于Kubernetes REST API的工作方式: 在哪里以及如何定义从REST路径到处理REST调用的函数的映射? 与etcd的交互发生在哪里? 从客户端发出请求到保存在etcd中对象的端到端路 ...

  3. OpenGL学习(2)——绘制三角形

    在创建窗口的基础上,添加代码实现三角形的绘制. 声明和定义变量 在屏幕上绘制一个三角形需要的变量有: 三角形的三个顶点坐标: Vertex Buffer Object 将顶点数据存储在GPU的内存中: ...

  4. Spark RDD深度解析-RDD计算流程

    Spark RDD深度解析-RDD计算流程 摘要  RDD(Resilient Distributed Datasets)是Spark的核心数据结构,所有数据计算操作均基于该结构进行,包括Spark ...

  5. 实验吧CTF天网管理系统

    天网你敢来挑战嘛 格式:ctf{ } 解题链接: http://ctf5.shiyanbar.com/10/web1/ 打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码 看来是和md ...

  6. Linux内核分析 NO.3

    跟踪分析Linux内核的启动过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...

  7. Linux内核第一节

    存储程序计算机工作模型 存储程序计算机——冯诺依曼体系结构 IP:寄存器,总是指向内存的代码段.IP(16位) 32位(EIP) 64位(RIP). 内存:保存数据和指令. CPU:CPU从IP指向的 ...

  8. linux 常用命令-tar(压缩、解压)

    linux中通过tar命令来压缩解压文件,常用命令如下 主选项(主选项是必须要有的,作用是告诉这次操作的主要目的): 1)c: (create)创建压缩包或者打包 2)x:(extract)拆包 3) ...

  9. RAC系统化学习

    1.RACSignal:   // 只要订阅者调用sendNext,就会执行nextBlock // 只要订阅RACDynamicSignal,就会执行didSubscribe // 前提条件是RAC ...

  10. javascript面向对象系列第五篇——拖拽的实现

    前面的话 在之前的博客中,拖拽的实现使用了面向过程的写法.本文将以面向对象的写法来实现拖拽 写法 <style> .test{height: 50px;width: 50px;backgr ...