zoukankan      html  css  js  c++  java
  • MongoDB内嵌文档操作

    实体定义:

        [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" : "1",
        "LastName" : "2",
        "Password" : "3",
        "Attribute" : [ 
            {
                "_id" : "4",
                "Name" : "4"
            }, 
            {
                "_id" : "5",
                "Name" : "5"
            }, 
            {
                "_id" : "6",
                "Name" : "6"
            }
        ]
    }

    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("6"));
    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("6"));
    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);
  • 相关阅读:
    asp.net C# 实现阿里大鱼和云片网短信接口类
    asp.net C# 实现微信接口权限开发类
    asp.net C# 实现微信服务器配置
    php学习资料
    阿里云ECS升级OpenSSL记录
    Docker(十三):OpenStack部署Docker集群
    Docker(十二):Docker集群管理之Compose
    Docker(十一):Docker实战部署HTTPS的Tomcat站点
    Docker(十):Docker安全
    Docker(九):Docker容器卷插件
  • 原文地址:https://www.cnblogs.com/lenmom/p/9010501.html
Copyright © 2011-2022 走看看