实体定义:

    [BsonIgnoreExtraElements]
public class Person : BaseEntity
{
public string FirstName { get; set; } public string LastName { get; set; } public string Password { get; set; } public List<Attr> Attribute { get; set; }
} public class Attr
{
public string Id { get; set; } public string Name { get; set; }
}

数据库存储内容形式:

{
"_id" : ObjectId("5af189270d8ef62bb49d045e"),
"FirstName" : "",
"LastName" : "",
"Password" : "",
"Attribute" : [
{
"_id" : "",
"Name" : ""
},
{
"_id" : "",
"Name" : ""
},
{
"_id" : "",
"Name" : ""
}
]
}

1. 删除内嵌字段的值:

如删除Attribute子集合:

 var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.Unset(x => x.Attribute);
var result = this.personRepository.Collection.UpdateOne(filter, update);

2. 删除Attribute集合中Id等于6的内嵌文档

var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.PullFilter<Attr>(x => x.Attribute, y => y.Id.Equals(""));
var result = this.personRepository.Collection.UpdateOne(filter, update);

或者

var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.PullFilter(x => x.Attribute, y => y.Id.Equals(""));
var result = this.personRepository.Collection.UpdateOne(filter, update);

或者

var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.PullFilter("Attribute", Builders<Attr>.Filter.Eq("_id",6));
var result = this.personRepository.Collection.UpdateOne(filter, update);

3. 更新FirstName的值

var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.Set(x => x.FirstName, "22222");
var result = this.personRepository.Collection.UpdateOne(filter, update);

4. 往Attribute里添加一条记录

var filter = Builders<Person>.Filter.Where(x => x.Id == id);
var update = Builders<Person>.Update.Push<Attr>(x => x.Attribute, new Attr() { Id = "7", Name = "7" });
var result = this.personRepository.Collection.UpdateOne(filter, update);

MongoDB内嵌文档操作的更多相关文章

  1. mongodb内嵌文档的javaapi,增删改查

    数据结构: {"_id" : "000000001",  //Mongodb默认主键 "UID" : "000000001&quo ...

  2. MongoDB 内嵌文档

    MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...

  3. mongodb内嵌文档的查询

    本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...

  4. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  5. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  6. mongoTemplate操作内嵌文档

    关系型数据库中,表与表的关联关系有1:1,也有1:n的.在java的面向对象的世界里就是主对象嵌子对象,与主对象嵌集合<子对象>的两种形式. 主对象嵌子对象操作: 新增.修改都直接用如下方 ...

  7. 学习MongoDB 五: MongoDB查询(数组、内嵌文档)(二)

    一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是 ...

  8. mongodb查询内嵌文档

    mongodb查询内嵌文档   假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...

  9. MongoDB查询或修改内嵌文档

    作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...

随机推荐

  1. Android之微信开放平台创建应用

    微信开放平台网站:https://open.weixin.qq.com 1:登录之后(未登录就注册),点击移动应用开发进入 点击创建应用之后,进入填写对应信息. 接下来,填写平台信息. 应用签名获取方 ...

  2. 解决点击tomcat的startup.bat一闪而过的问题

    问题: 点击startup.bat一闪而过,经过网上查询,原来是没有配置JAVA_HOME,配置一下就可以了 原因: tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与 ...

  3. CSS border 属性和 border-collapse 属性

    border 简写属性在一个声明设置所有的边框属性. 可以按顺序设置如下属性: border-width border-style border-color 如果不设置其中的某个值,也不会出问题,比如 ...

  4. module.exports和exports

    require 用来加载代码,而 exports 和 module.exports 则用来导出代码.但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 e ...

  5. 十款效果惊艳的Html案例(一)

    http://www.html5tricks.com/10-html5-image-effect.html

  6. 简述 AJAX 及基本步骤

    简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行 ...

  7. vue router动态路由

    <div id="#app"> <router-link to="/user/header">路由1</router-link&g ...

  8. get方法传送中文乱码解决方法

    找到tomcat配置文件 server.xml 找到<Connector port="8080" .......  />   (......为配置文件中原来内容) 在最 ...

  9. Visual Studio 后期生成事件命令行

    set "str=$(ConfigurationName)" if "%str%"=="Release" (xcopy /y/e $(Tar ...

  10. rxjava 调用retrofit执行网络请求的过程

    retrofit流程图 -1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅   0.从业务中 ...