问题标签 [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.

0 投票
3 回答
3569 浏览

c# - 将 C# 类序列化到 MongoDB,而不在子文档中使用鉴别器

我正在编写写入现有 Web 应用程序(用 PHP 编写)使用的 Mongo 数据库的 C# 代码,因此我不需要更改数据库的现有结构。数据库结构如下所示:

我把它读到一个看起来像这样的类中:

阅读代码如下:

(注意:我仍在开发中。在生产中,我将一次切换到ToCursorAsync()并循环一个数据,所以不用担心我会将整个列表拉入内存。)

到目前为止,一切都很好。

但是,当我写出数据时,它是这样的:

请注意该address字段的外观有何不同。那不是我想要的。我希望地址数据看起来就像地址数据输入(否_t_v字段)。换句话说,最终作为内容的部分_v是我想作为字段值保存到 Mongo 数据库中的内容address

现在,如果我只是从我自己的 C# 代码中使用 Mongo 数据库,这可能会很好:如果我要反序列化这个数据结构,我假设(虽然我还没有验证)Mongo 将使用_tand_v字段来创建正确类型 ( AddressData) 的实例,并将它们放在我的实例的Address属性中。Person在这种情况下,一切都会好起来的。

但我正在与一个 PHP Web 应用程序共享这个数据库,该应用程序希望在地址数据中看到这些_t_v值,也不知道如何处理它们。我需要告诉 Mongo “请不要序列Address属性的类型。假设它总是一个AddressData实例,并且只序列化它的内容而没有任何鉴别器。”

我目前用来将对象持久保存到 Mongo 的代码如下所示:

在那里的某个地方,我需要告诉 Mongo“我不关心属性_t上的字段Address,我什至不想看到它。我知道我在这个字段中坚持什么类型的对象,他们”永远都是一样的。” 但是我还没有在 Mongo 文档中找到任何东西来告诉我如何做到这一点。有什么建议么?

0 投票
1 回答
849 浏览

c# - MongoDb 3.0 C#更新子文档的子文档

下面是我的文档示例。我正在尝试根据 CostReportingPeriods 元素的 id 更新 CostReports 部分。

我正在使用以下代码尝试更新该元素,但收到一条错误消息,指出无法使用该元素(CostReportingPeriods.CostReports 的 CostReportingPeriods)来遍历该元素。如果我添加 CostReportingPeriods.0.CostReports 它会将其添加到数组的第一个元素中,而不管过滤器如何。

如何让它根据子文档的 id 更新我希望它更新的元素?

0 投票
1 回答
132 浏览

mongodb - 使用未确认的 writeconcern 0 时,有没有办法检查 mongodb 数据库上的插入错误?

我的系统需要每秒从数千个请求中写入大量数据库。为了尽量减少响应时间,我已经开始学习写问题,使用 unacknowledged / writeconcern 0 会有所帮助,但是正如预期的那样,在其“即发即弃”模式下,应用程序将不知道是否有任何问题。我想知道是否有办法监控或通知是否有任何错误。我不一定要确切知道哪些写入失败,只需知道失败的次数。该解决方案不必是 C#,并且可以在数据库服务器本身(而不是应用程序服务器)上运行。

我的环境是截至 12 月 7 日最新的 C# 驱动程序和最新的 MongoDb,在 Ubuntu 14.04 上运行。应用服务器是 Windows 2012/IIS8 ASP.NET C#。

0 投票
2 回答
15988 浏览

c# - 使用 C# 驱动程序分页 MongoDB 查询

我正在为 C# 使用 2.2 版的 MongoDB 驱动程序。我想对查询进行分页:对查询的响应必须包含当前页面的项目以及与查询匹配的项目总数。

我想做一个查询。使用 mongo shell,我可以意识到:

但是对于 C# 驱动程序,我不知道如何只用一个查询来完成它。

可能吗 ?一些想法?

0 投票
1 回答
1417 浏览

c# - 带有字典的 MongoDB C# 2.x 驱动程序 ElemMatch

我正在尝试使用 ElemMatch 使用 2.2 驱动程序在 MongoDB 中查找文档,但没有成功。我收到一个异常,例如:

System.InvalidOperationException:字段“EnabledForProduct”的序列化程序必须实现 IBsonArraySerializer 并提供项目序列化信息。

这是我的班级的样子:

我的 ClassMap 看起来像这样:

尝试使用过滤器时会发生异常,例如:

这曾经在 1.x 驱动程序中完美运行。

有谁知道我做错了什么?

0 投票
1 回答
4408 浏览

c# - 当我使用 ReplaceOneAsync 和 IsUpsert = true mongodb 添加一个空 ID。我该如何阻止这个?

如果文档存在,我可以使用以下方法更新文档

如果 Id = NULL 并且我想返回更新的结果,如何插入文档。

插入新文档NULLID 时,创建了一个带有NULLID 的记录,我 [BsonId(IdGenerator = typeof(GuidGenerator))]没有任何运气就添加了。

我在做什么错所以ObjectId可以为新记录生成一个。

0 投票
1 回答
1260 浏览

c# - oData 过滤器不适用于 MongoDB 和 Web API 的导航属性

控制器看起来像

在 MongoDb 存储库中,我返回集合的 AsQueryable。

MongoDB 文档看起来像

Id 是使用 ObjectId.GenerateNewId().ToString() 生成的,因此它们存储为字符串。

Node 和 NodeGroup 是纯 POCO

问题

oData URI,例如

工作正常。

但是当我尝试过滤导航属性时

它给了我例外

message: "无法确定表达式的序列化信息:ConditionalExpression。",

0 投票
1 回答
5340 浏览

c# - c# mongo 2.0驱动在FindOneAndUpdateAsync之后获取项目

我在 c# 中有以下查询:

现在,如果我写.Result在最后一行之后。我是在更新之前还是之后获取文档?

TIA。

0 投票
0 回答
83 浏览

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。

0 投票
1 回答
2629 浏览

c# - c# Mongodb 2.0驱动获取UpdateManyAsync结果

有没有办法在更新之后/之前获取更新的集合?我能想到的东西是相当沉重的。

  1. 使用过滤器获取我想要更新的内容。
  2. 更新我在以前状态下获得的所有内容
  3. 再次通过 id 获取所有内容并检查已更新的内容。

为什么我需要这个?

我有一项服务,它不断地从数据库中获取数据。我希望它根据它们的状态自动获取东西。

例如,如果包含字段 Status 的文档的状态为 1,我希望服务获取它并在进程中自动将其更改为 2,因此所有其他组件都不会出于某种原因覆盖我。

更新看起来像:

有什么方向吗?

TIA。