当前位置: 首页 > 编程语言 > C#

如何在MongoDB中聚合文档中的数组并获取多个条件的计数?分享

时间:2023-04-10 11:18:04 C#

如何在MongoDB中聚合文档中的数组并获取多个条件的计数?我正在编写一个程序,该程序获取车辆刷新数据的XML文件并将其转换为JSON,以便将其存储在MongoDB数据库中。XML是这样开始的:PASSEDPASSED在我将其转换为JSON并添加项目标识符之后,我得到的格式如下:{"FlashReportGeneratorAddedTag":{"VehicleEntry":[{"VehicleStatus":"PASSED"},{"VehicleStatus":"PASSED"}]},"project_id":"1234"}我想做的是获取项目1234的每个文件中通过的车辆总数和车辆总数,但我不运气好。我已经尝试使用我知道的基本聚合技能,但我不能简单地按project_id分组,因为当我需要聚合其中的数组时,它是按文档分组的。我还没有找到任何资源告诉你是否可以或不能一次聚合两个值(获取通过的总和和失败计数的总和)。作为最后的手段,我可??以更改文档样式,以便每个VehicleEntry都是它自己的文档,但如果可能的话,我想获取并存储XML。编辑使用Unwind我能够为我正在寻找的数组设置聚合:varaggregate=collection.Aggregate().Match(newBsonDocument{{"project_id","1234"}}).Unwind(i=>i["FlashReportGeneratorAddedTag.VehicleEntry"]);但是,我找不到合适的方法来对这些进行分组以获得整个阵列的通过/失败计数。我假设有一些方法我需要使用匹配函数,但我不知道如何在不排除这两个条件之一的情况下执行此操作。我是否必须运行聚合两次,一次通过,一次失败?感谢JohnnyHK的提示和更多的挖掘,我能够弄清楚这一点。首先,我必须使用Unwind方法展开Vehicleentry数组以便对其进行聚合:varaggregate=collection.Aggregate().Match(newBsonDocument{{"project_id","1234"}}).Unwind(i=>i["FlashReportGeneratorAddedTag.VehicleEntry"])曾经,我能够嵌套BsonDocuments,因此可以根据条件对它们求和。为了获得通过的计数,我使用这个:FlashReportGeneratorAddedTag.VehicleEntry.VehicleStatus","PASSED"}}},1,0}}}}}}同样,我添加了一个失败的标签。整个(还没格式化)是这样的:以上是C#学习教程:HowtoaggregateanarraywithinadocumentinMongoDBandgetcountsformultipleconditions?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varcollection=_database.GetCollection(Vehicles);varaggregate=collection.Aggregate().Match(newBsonDocument{{"project_id","1234"}}).Unwind(i=>i["FlashReportGeneratorAddedTag.VehicleEntry"]).Group(newBsonDocument{{"_id","$project_id"},{"passed",newBsonDocument{{"$sum",newBsonDocument{{"$cond",newBsonArray{newBsonDocument{{"$eq",newBsonArray{"$FlashReportGeneratorAddedTag.VehicleEntry.VehicleStatus","PASSED"}}},1,0}}}}}},{"失败",newBsonDocument{{"$sum",newBsonDocument{{"$cond",newBsonArray{newBsonDocument{{"$eq",newBsonArray{"$FlashReportGeneratorAddedTag.VehicleEntry.VehicleStatus","FAILED"}}},1,0}}}}}},});varresults=awaitaggregate.ToListAsync();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: