实体定义:

    [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. nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)

    最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那 ...

  2. JAVA synchronized关键字锁机制(中)

    synchronized 锁机制简单的用法,高效的执行效率使成为解决线程安全的首选. 下面总结其特性以及使用技巧,加深对其理解. 特性: 1. Java语言的关键字,当它用来修饰一个方法或者一个代码块 ...

  3. Learn Rails5.2 Bundler ; Forms

    如果一个Rubyer想要提供一个功能或某个程序或程序的集合给其他Rubyer使用,这个Rubyer可以创建一个package,这个package就叫做gems. 可以通过gem install安装. ...

  4. UVA-1515 Pool construction (最小割)

    题目大意:有一块地,分成nxm块.有的块上长着草,有的块上是荒地.将任何一块长着草的块上的草拔掉都需要花费d个力气,往任何一块荒地上种上草都需要花费f个力气,在草和荒地之间架一个篱笆需要花费b个力气, ...

  5. ASP.NET常用的指令

    指令的类型 指令 说明 Application 配置全局应用程序类 Assembly 注册用在Web窗体中的程序集.建议不使用此指令.而是NuGet. Control 配置用户控件 Implement ...

  6. vue 子组件传递数据跟父组件

    子组件 <body> <div v-on:click="test"></div> <script> export default { ...

  7. 如何写入和读取从 Microsoft 消息队列在 Visual C#

    注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成.微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章.然而由机器翻译的文章并不总是完美的.它 ...

  8. 开源FTP软件FileZilla使用介绍

    简介 FileZilla是一个优秀的开源FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能,如果想自己搭建FTP服务器,FileZilla是一个好选择. 下载 FileZilla有一个中 ...

  9. 在JavaScript中进行文件处理,第四部分:对象URLs

    译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 学习到这里,你已经了解在传统方式中如何使用文件, ...

  10. 【LeetCode 222_完全二叉树_遍历】Count Complete Tree Nodes

    解法一:递归 int countNodes(TreeNode* root) { if (root == NULL) ; TreeNode *pLeft = root->left; TreeNod ...