问题标签 [mongodb-csharp-2.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将 C# 类序列化到 MongoDB,而不在子文档中使用鉴别器
我正在编写写入现有 Web 应用程序(用 PHP 编写)使用的 Mongo 数据库的 C# 代码,因此我不需要更改数据库的现有结构。数据库结构如下所示:
我把它读到一个看起来像这样的类中:
阅读代码如下:
(注意:我仍在开发中。在生产中,我将一次切换到ToCursorAsync()
并循环一个数据,所以不用担心我会将整个列表拉入内存。)
到目前为止,一切都很好。
但是,当我写出数据时,它是这样的:
请注意该address
字段的外观有何不同。那不是我想要的。我希望地址数据看起来就像地址数据输入(否_t
或_v
字段)。换句话说,最终作为内容的部分_v
是我想作为字段值保存到 Mongo 数据库中的内容address
。
现在,如果我只是从我自己的 C# 代码中使用 Mongo 数据库,这可能会很好:如果我要反序列化这个数据结构,我假设(虽然我还没有验证)Mongo 将使用_t
and_v
字段来创建正确类型 ( AddressData
) 的实例,并将它们放在我的实例的Address
属性中。Person
在这种情况下,一切都会好起来的。
但我正在与一个 PHP Web 应用程序共享这个数据库,该应用程序不希望在地址数据中看到这些_t
和_v
值,也不知道如何处理它们。我需要告诉 Mongo “请不要序列化Address
属性的类型。假设它总是一个AddressData
实例,并且只序列化它的内容而没有任何鉴别器。”
我目前用来将对象持久保存到 Mongo 的代码如下所示:
在那里的某个地方,我需要告诉 Mongo“我不关心属性_t
上的字段Address
,我什至不想看到它。我知道我在这个字段中坚持什么类型的对象,他们”永远都是一样的。” 但是我还没有在 Mongo 文档中找到任何东西来告诉我如何做到这一点。有什么建议么?
c# - MongoDb 3.0 C#更新子文档的子文档
下面是我的文档示例。我正在尝试根据 CostReportingPeriods 元素的 id 更新 CostReports 部分。
我正在使用以下代码尝试更新该元素,但收到一条错误消息,指出无法使用该元素(CostReportingPeriods.CostReports 的 CostReportingPeriods)来遍历该元素。如果我添加 CostReportingPeriods.0.CostReports 它会将其添加到数组的第一个元素中,而不管过滤器如何。
如何让它根据子文档的 id 更新我希望它更新的元素?
mongodb - 使用未确认的 writeconcern 0 时,有没有办法检查 mongodb 数据库上的插入错误?
我的系统需要每秒从数千个请求中写入大量数据库。为了尽量减少响应时间,我已经开始学习写问题,使用 unacknowledged / writeconcern 0 会有所帮助,但是正如预期的那样,在其“即发即弃”模式下,应用程序将不知道是否有任何问题。我想知道是否有办法监控或通知是否有任何错误。我不一定要确切知道哪些写入失败,只需知道失败的次数。该解决方案不必是 C#,并且可以在数据库服务器本身(而不是应用程序服务器)上运行。
我的环境是截至 12 月 7 日最新的 C# 驱动程序和最新的 MongoDb,在 Ubuntu 14.04 上运行。应用服务器是 Windows 2012/IIS8 ASP.NET C#。
c# - 使用 C# 驱动程序分页 MongoDB 查询
我正在为 C# 使用 2.2 版的 MongoDB 驱动程序。我想对查询进行分页:对查询的响应必须包含当前页面的项目以及与查询匹配的项目总数。
我想做一个查询。使用 mongo shell,我可以意识到:
但是对于 C# 驱动程序,我不知道如何只用一个查询来完成它。
可能吗 ?一些想法?
c# - 带有字典的 MongoDB C# 2.x 驱动程序 ElemMatch
我正在尝试使用 ElemMatch 使用 2.2 驱动程序在 MongoDB 中查找文档,但没有成功。我收到一个异常,例如:
System.InvalidOperationException:字段“EnabledForProduct”的序列化程序必须实现 IBsonArraySerializer 并提供项目序列化信息。
这是我的班级的样子:
我的 ClassMap 看起来像这样:
尝试使用过滤器时会发生异常,例如:
这曾经在 1.x 驱动程序中完美运行。
有谁知道我做错了什么?
c# - 当我使用 ReplaceOneAsync 和 IsUpsert = true mongodb 添加一个空 ID。我该如何阻止这个?
如果文档存在,我可以使用以下方法更新文档
如果 Id = NULL 并且我想返回更新的结果,如何插入文档。
插入新文档NULL
ID 时,创建了一个带有NULL
ID 的记录,我 [BsonId(IdGenerator = typeof(GuidGenerator))]
没有任何运气就添加了。
我在做什么错所以ObjectId
可以为新记录生成一个。
c# - oData 过滤器不适用于 MongoDB 和 Web API 的导航属性
控制器看起来像
在 MongoDb 存储库中,我返回集合的 AsQueryable。
MongoDB 文档看起来像
Id 是使用 ObjectId.GenerateNewId().ToString() 生成的,因此它们存储为字符串。
Node 和 NodeGroup 是纯 POCO
问题
oData URI,例如
工作正常。
但是当我尝试过滤导航属性时
它给了我例外
message: "无法确定表达式的序列化信息:ConditionalExpression。",
c# - c# mongo 2.0驱动在FindOneAndUpdateAsync之后获取项目
我在 c# 中有以下查询:
现在,如果我写.Result
在最后一行之后。我是在更新之前还是之后获取文档?
TIA。
c# - c# mongo 2.0 从一个数组移动到另一个数组
我有一个包含 2 个数组的文档。
我想从第一个数组中提取一些东西并将其添加到另一个数组中。我知道的唯一方法是完全 FindOneAndUpdateAsync,获取实例并将其添加到设置中。
问题是,这不是原子的。我很想得到一个方向。
不幸的是,我只是没有合适的代码可以与您分享,以向您展示我尝试过的代码,因为它是一个愚蠢的代码。
A 组 = {0,1,2,3,4}
B 组 = {5,6,7,8}
例如,我想从 froup A 中取出 4 并以原子方式将其移动到 B 中。A组和B组都在同一个文件下。
TIA。
c# - c# Mongodb 2.0驱动获取UpdateManyAsync结果
有没有办法在更新之后/之前获取更新的集合?我能想到的东西是相当沉重的。
- 使用过滤器获取我想要更新的内容。
- 更新我在以前状态下获得的所有内容
- 再次通过 id 获取所有内容并检查已更新的内容。
为什么我需要这个?
我有一项服务,它不断地从数据库中获取数据。我希望它根据它们的状态自动获取东西。
例如,如果包含字段 Status 的文档的状态为 1,我希望服务获取它并在进程中自动将其更改为 2,因此所有其他组件都不会出于某种原因覆盖我。
更新看起来像:
有什么方向吗?
TIA。