Tag: mongodb

用AddToSet更新不用MongoDB C#更新空值

使用MongoDB,当数组为null时,我无法在数组中添加en元素。 如果我从控制台添加项目,AddToSet按预期工作。 我正在使用10gen的官方C#驱动程序。 var query = Query.EQ(“_id”, objectId); var itemDoc = item.ToBsonDocument(); //items is an array but currently null var update = MongoDB.Driver.Builders.Update.AddToSet(“items”, itemDoc); // YUNoWork? //somefield doesn’t exist var workingUpdate = MongoDB.Driver.Builders.Update.AddToSet(“somefield”, itemDoc); //works fine var collection = DataBase.GetCollection(CollectionName); collection.Update(query, update); // doesn’t work collection.Update(query, workingUpdate); // works 这是预期的行为吗? 如果是这样,是否有更通用的方法将项添加到数组?

如何在C#MongoDB驱动程序v2.0中获取连接状态?

我们开始使用新的MongoDB驱动程序v2 ,我们无法理解我们是否连接到数据库。 我们的仓库代码: var client = new MongoClient(“mongodb://{wrong-host}:{wrong-port}/{dbbname}”); var database = client.GetDatabase(url.DatabaseName); wrong-host和wrong-port是无效值。 首先,我们认为如果没有人正在侦听指定的地址但驱动程序没有抛出exception将被引发。 下一步是在db上调用方法: var dbs = client.ListDatabasesAsync().Result.ToListAsync().Result; 在这里,我们有freez 30秒而不是例外。 我们不适合等待30秒来了解我们是否联系。 System.TimeoutException:使用CompositeServerSelector选择服务器30000ms后出现超时{Selectors = ReadPreferenceServerSelector {ReadPreference = {Mode = Primary,TagSets = []}},LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000}}。 集群状态的客户端视图是{ClusterId:“1”,类型:“未知”,状态:“已断开连接”,服务器:[{ServerId:“{ClusterId:1,EndPoint:”****“}”,EndPoint: “****”,状态:“Disconnected”,键入:“Unknown”,HeartbeatException:“MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生exception.—> System.Net.Sockets.SocketException :无法建立连接,因为目标计算机主动拒绝它****** 最后,我们尝试设置不同的超时但没有任何改变。 var client = new MongoClient(new MongoClientSettings { SocketTimeout = TimeSpan.FromSeconds(1), MaxConnectionIdleTime = TimeSpan.FromSeconds(1), MaxConnectionLifeTime = […]

MongoDB:如何在C#中使用嵌套数组加载集合?

我有一个名为“服务器”的集合,包含以下文档。 { name: “West”, ip: “123.123.123.123”, channels: [ { name: “English”, port: “1234”, status: “0” }, { name: “Spanish”, port: “1235”, status: “0” }, { name: “German”, port: “1236”, status: “0” } ] }, { name: “East”, ip: “122.122.122.122”, channels: [ { name: “English”, port: “1234”, status: “0” }, { name: “French”, port: “1235”, status: […]

了解MongoDB中的WriteConcern C#

我一直在阅读MongoDB中的Write Concern 。 我知道有几个级别决定了写操作成功的保证级别,并且设置此级别的性能越高,性能权衡越大。 但是,我正在C#环境中工作,我正在试图弄清楚如何在那里使用Write Concern以及哪些级别对某些情况最有效。 我已经想出如何使用WriteConcernResult对象收集检查结果,我主要对关卡本身感兴趣。 这些是我的问题: 如何在C#中为特定写入设置Write Concern级别? 这个答案建议使用连接字符串,但这看起来像一个全局设置,我不想要,因为我将使用的一些写操作比其他更“重要”,我不想杀死性能。 我注意到有一个WriteConcern类,但文档中没有详细介绍它的使用(它在文档中的MongoDB.Driver命名空间下)。 特别是,我如何将其设置为“Journaled”或“Replica Acknowledged”,因为它默认为“已确认”? 对于每个级别,哪些类型的问题可以通过Write Concern检查? 例如:系统崩溃,电源故障,网络连接问题等。我对偷偷摸摸的东西特别感兴趣,因为电源故障等非常明显,我们可以估计操作可能失败的时间间隔。并做出相应的反应

使用C#MongoDB LINQ和鉴别器

我有一个MongoDB集合,其中包含三个不同类(A,B,C)的文档,这些类都inheritance自公共类D. 使用官方C#驱动程序,我插入了所有三种类型(A,B,C)的文档,它们都与_t鉴别器一起正确显示,并且在我的代码中,他们的类映射被注册。 如果我发出LINQ查询,如下所示(使用VB): dim Result = database.GetCollection(“mycol”).AsQueryable(Of C).Where(some where clause) 如果我计算结果,我收到一个错误“元素’来自类A的元素名称’与类C的任何字段或属性都不匹配。” 判断器是不是要在AsQueryable(Of C)代码中AsQueryable(Of C) ? 当我发出.Count我的Where子句(特定于C类元素)被应用于A,B和C的文档。 我尝试添加.OfType(Of C)没有效果,尝试使用.ToList首先转换为List,但我继续得到相同的错误。 有任何想法吗? 作为背景,我的客户端代码通常会处理类型为D的对象.A,B,C共享许多从Dinheritance的公共属性,我想将索引放在上面,因此我把它们放在一个集合中。 但是,偶尔我需要在特殊情况下直接引用类型A,B或C的对象。

在mongodb集合上无法做到这一点

我有两个模型,一个用户和一个团队,如下所示: [BsonRepresentation(BsonType.ObjectId)] public ObjectId _id { get; set; } [Display(Name = “Password:”)] public string Password { get; set; } [Display(Name = “Confirm:”)] public string ConfirmPassword { get; set; } [Display(Name = “Email:”)] public string Email { get; set; } [Display(Name = “Username:”)] public string UserName { get; set; } [Display(Name = “Firtname:”)] public string Firstname […]

MongoDB C#驱动程序2.0 InsertManyAsync与BulkWriteAsync

我必须使用新的C#2.0驱动程序在MongoDB集合中插入许多文档。 是使用collection.InsertManyAsync(…)collection.BulkWriteAsync(…)有什么区别? (特别是关于表现)。 根据我对MongoDB文档的理解,带有文档数组的插入应该是一个大量的操作。 那是对的吗? 谢谢你的帮助。

如何从控制台应用程序跟踪MongoDB请求

我有一个用C#编写的Console Application项目,我已经使用以下NuGet包添加了Application Insights。 Microsoft.ApplicationInsights Microsoft.ApplicationInsights.Agent.Intercept Microsoft.ApplicationInsights.DependencyCollector Microsoft.ApplicationInsights.NLogTarget Microsoft.ApplicationInsights.PerfCounterCollector Microsoft.ApplicationInsights.Web Microsoft.ApplicationInsights.WindowsServer Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel 我已经在配置文件中配置了InstrumentationKey,并且我在启动时使用以下代码启动了TelemetryClient: var telemetryClient = new TelemetryClient(); telemetryClient.Context.User.Id = Environment.UserName; telemetryClient.Context.Session.Id = Guid.NewGuid().ToString(); telemetryClient.Context.Device.OperatingSystem = Environment.OSVersion.ToString(); 一切都运行良好,除了AI没有捕获任何发送到Mongo的请求,我可以看到请求在“应用程序映射”中发送到SQL服务器,但没有任何其他外部请求的迹象。 有什么方法可以看到对Mongo的请求的遥测? 编辑 – 感谢Peter Bons,我最终得到了以下几个像魅力一样的东西,让我能够区分成功和失败: var telemetryClient = new TelemetryClient(); var connectionString = connectionStringSettings.ConnectionString; var mongoUrl = new MongoUrl(connectionString); var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); mongoClientSettings.ClusterConfigurator = clusterConfigurator => { […]

如何在新的mongo C#驱动程序中执行findAll并使其同步

我正在使用官方C#驱动程序来执行FindAll并升级到新的驱动程序2.0。 FindAll已过时,将替换为Find。 我试图转换一个简单的方法,返回一个Class1列表。 无法在文档中找到使用POCO的实际示例 var collection = database.GetCollection(Collection.MsgContentColName); return collection.FindAll().ToList(); 有人可以帮我转换2.0驱动程序并返回列表而不是任务吗?

需要在MongoDB中存储高精度十进制值

我对MongoDB没什么经验。 我经常在大型SQL服务器DB上工作。 MongoDB只支持double, 没有小数 。 C#驱动程序将小数序列化为字符串。 如果我将小数作为字符串存储在MongoDB中,我会错过什么function? 有没有办法将小数的默认序列化设置为double(AllowTruncation)而不必在每个属性上放置一个属性? 如果我使用Bson双倍,我会失去什么精确度? 谢谢你的帮助! UPDATE 我有一个在C#中使用小数的现有应用程序模型。 我想将MongoDB用作新的数据库层,并尽可能在现有应用程序中进行更改。 这就是为什么我在寻找一种方法将C#中的小数映射到MongoDB中加倍 。 我明白我的精确度会下降,并且必须分析它的副作用。 我唯一剩下的问题是要知道是否有办法将小数的默认序列化设置为double。 再次感谢。 到目前为止很棒的答案和评论。