问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何获得在连接字符串在C#中指定的mongo数据库

发布网友 发布时间:2022-04-23 21:05

我来回答

2个回答

懂视网 时间:2022-04-09 11:07

 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。


? :portX 可选的指定端口,如果不填,默认为27017

? /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开admin数据库。


? ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

 

2、options 是连接参数

 

  • connect=direct|replicaSet
  • direct: 连接方式为单个服务器。如果提供了多个主机地址,建立连接之后,按顺序访问。如果仅仅指定了一个主机,direct是默认值。
  • replicaSet: 就和描述的那样,连接到replica set . 这个主机地址列表,是为了发现replica set。如果连接多个主机replicaSet是默认值。
  •  

  • replicaSet=name
  • 验证replica set的名称。 Impliesconnect=replicaSet.
  •  

  • slaveOk=true|false
  • true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。
  • false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。
  •  

  • safe=true|false
  • true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考wtimeoutMS).
  • false: 在每次更新之后,驱动不会发送getLastError来确保更新成功。
  •  

  • w=n
  • 驱动添加 { w : n } 到getLastError命令. 应用于safe=true。
  •  

  • wtimeoutMS=ms
  • 驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true.
  •  

  • fsync=true|false
  • true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true.
  • false: 驱动不会添加到getLastError命令中。.
  •  

  • maxPoolSize=n
  • minPoolSize=n
  • 一些驱动会把没用的连接关闭。 然而,如果连接数低于minPoolSize值之下, 它们不会关闭空闲的连接。注意的是连接会按照需要进行创建,因此当连接池被许多连接预填充的时候,minPoolSize不会生效。
  •  

  • waitQueueTimeoutMS=ms
  • 在超时之前,线程等待连接生效的总时间。如果连接池到达最大并且所有的连接都在使用,这个参数就生效了。
  •  

  • waitQueueMultiple=n
  • 驱动强行限制线程同时等待连接的个数。 这个限制了连接池的倍数。
  •  

  • connectTimeoutMS=ms
  • 可以打开连接的时间。
  •  

  • socketTimeoutMS=ms
  • 发送和接受sockets的时间
  •  

     

    二、MongoDB的连接字符串实例

     

     1、连接本地数据库服务器,端口是默认的。

     mongodb://localhost

     

     2、使用用户名fred,密码foobar登录localhost的admin数据库。

    mongodb://fred:foobar@localhost

     

    3、使用用户名fred,密码foobar登录localhost的baz数据库

    mongodb://fred:foobar@localhost/baz

     

    4、连接 replica pair, 服务器1为example1.com服务器2为example2

    mongodb://example1.com:27017,example2.com:27017

     

    5、连接 replica set 三台服务器 (端口 27017, 27018, 和27019)

    mongodb://localhost,localhost:27018,localhost:27019

     

    6、连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器

    mongodb://host1,host2,host3/?slaveOk=true

     

    7、直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器

    mongodb://host1,host2,host3/?connect=direct;slaveOk=true

     

    8、当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式

    安全模式连接到localhost:

    mongodb://localhost/?safe=true

     

    9、以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒

    mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

      注:

    热心网友 时间:2022-04-09 08:15

    public sealed class Customer
    {
    [MongoId]
    public string CustomerID { get; set; }
    public string CustomerName { get; set; }
    public string ContactName { get; set; }
    public string Address { get; set; }
    public string PostalCode { get; set; }
    public string Tel { get; set; }
    }
    说明:这就是一个简单的类,而且代码中的[MongoId]也是可以不要的(这个后面再说)。
    在操作数据库之前,我要说明一下:MongoDB在使用前,并不要求您事先创建好相应的数据库,设计数据表结构!
    在MongoDB中,没有【表】的概念,取而代之的是【集合】,也没有【数据记录】的概念,取而代之的是【文档】,我们可以把【文档】理解成一个【对象】,任意的对象,甚至可以有复杂的嵌套层次。
    因此,我们不用再写代码从【数据表字段】到C#类的【属性,字段】的转换了,现在直接就可以读写整个对象了。
    而且MongoDB不支持Join操作,所以,如果有【关联】操作,就需要你自己来处理。
    再来定义二个变量:
    private static readonly string _connectionString = "Server=127.0.0.1";

    private static readonly string _dbName = "MyNorthwind";
    新增记录
    public void Insert(Customer customer)
    {
    customer.CustomerID = Guid.NewGuid().ToString("N");

    // 首先创建一个连接
    using( Mongo mongo = new Mongo(_connectionString) ) {

    // 打开连接
    mongo.Connect();

    // 切换到指定的数据库
    var db = mongo.GetDatabase(_dbName);

    // 根据类型获取相应的集合
    var collection = db.GetCollection<Customer>();

    // 向集合中插入对象
    collection.Insert(customer);
    }
    }
    上面的代码中,每一行都有注释,这里就不再解释了。
    删除记录
    public void Delete(string customerId)
    {
    using( Mongo mongo = new Mongo(_connectionString) ) {
    mongo.Connect();
    var db = mongo.GetDatabase(_dbName);
    var collection = db.GetCollection<Customer>();

    // 从集合中删除指定的对象
    collection.Remove(x => x.CustomerID == customerId);
    }
    }
    更新记录
    public void Update(Customer customer)
    {
    using( Mongo mongo = new Mongo(_connectionString) ) {
    mongo.Connect();
    var db = mongo.GetDatabase(_dbName);
    var collection = db.GetCollection<Customer>();

    // 更新对象
    collection.Update(customer, (x => x.CustomerID == customer.CustomerID));
    }
    }
    获取记录列表
    public List<Customer> GetList(string searchWord, PagingInfo pagingInfo)
    {
    using( Mongo mongo = new Mongo(_connectionString) ) {
    mongo.Connect();
    var db = mongo.GetDatabase(_dbName);
    var collection = db.GetCollection<Customer>();

    // 先创建一个查询
    var query = from customer in collection.Linq()
    select customer;

    // 增加查询过滤条件
    if( string.IsNullOrEmpty(searchWord) == false )
    query = query.Where(c => c.CustomerName.Contains(searchWord) || c.Address.Contains(searchWord));

    // 先按名称排序,再返回分页结果.
    return query.OrderBy(x => x.CustomerName).GetPagingList<Customer>(pagingInfo);
    }
    }
    获取单个对象
    public Customer GetById(string customerId)
    {
    using( Mongo mongo = new Mongo(_connectionString) ) {
    mongo.Connect();
    var db = mongo.GetDatabase(_dbName);
    var collection = db.GetCollection<Customer>();

    // 查询单个对象
    return collection.FindOne(x => x.CustomerID == customerId);
    }
    }
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 mongodb sort是在服务器排序的吗 mongodb的near查询,sort之后,limit(10)与limit(50)的前10条,居然不同... C#对mongodb怎么进行排序查询 mongodb里如何对数字字符串进行排序 mongodb的排序消耗性能吗 MongoDB查询时排序字段为int类型和string类型的区别 mongodb如何根据字段(数组类型)的长度排序 如何通过字符串长度在MongoDB的结果排序问题,怎么解决 java来操作mongodb,排序和limit是在客户端做的吗 化名女生简短好听有哪些? mongodb排序能不能根据true或false 好听的女生名字 霸气 mongoDB查询排序问题 mongodb分组排序,在线等!!! 好听的男孩女孩名字? 如何排序在MongoDB中收集记录中数组 昱字取名女孩有寓意吗? mongodb排序问题 寓意前程似锦一帆风顺的名字有哪些? 晞字女孩起名寓意好不? Elasticsearch的架构是什么样的 柠檬百香果蜂蜜喝可以减肥吗 可以空腹喝吗 百香果柠檬蜂蜜水能减肥吗 百香果柠檬蜂蜜能减肥吗 快手直播大萍子卖货怎么样 快手直播卖货技巧有哪些? 蜂蜜柠檬百香果茶什么时候喝能减肥 我刚才在快手上面看到一个一百多万粉丝的主播,卖的商品为什么这么便宜,而且月销好几万,那为什么 快手直播卖货怎么样? 快手怎么直播卖产品更好呢? 手机QQ浏览器回收站里的东西删除了还能找的回来吗? 蒸烤箱热汉堡用什么功能 要怎么进去? 西门子冰箱温度怎么调节? 西门子冰箱中间生物保鲜的温度怎么调高? 西门子(SIEMENS)冰箱怎样调节温度,三层冰箱 西门子冰箱冷藏室温度调节不了是什么原因? 煎蛋为什么很容易糊?正确的方法应该是什么? UI设计师需要掌握什么知识 煎鸡蛋的时候,怎么才能不煎糊?