我对 mongo DB 还很陌生,正在为我们的一个应用程序进行试验。我们正在尝试实现 CQRS 和查询部分,我们正在尝试使用 node.js 和命令部分,我们正在通过 c# 实现。
我的一个集合中可能有数百万个文档。我们会有一个scenarioId字段,每个场景可以有大约 200 万条记录。
我们的用例是比较这两个场景数据,并对场景的每个字段进行一些数学运算。例如,每个场景都可以有一个属性avgMiles,我想计算这个属性的差异,用户应该能够过滤这个差异值。由于我的设计是将两个场景数据保存在单个集合中,因此我尝试按场景 ID 进行分组并进一步对其进行投影。
我的文档示例结构如下所示。
{
"_id" : ObjectId("5ac05dc58ff6cd3054d5654c"),
"origin" : {
"code" : "0000",
},
"destination" : {
"code" : "0001",
},
"currentOutput" : {
"avgMiles" : 0.15093020854848138,
},
"scenarioId" : NumberInt(0),
"serviceType" : "ECON"
}
Run Code Online (Sandbox Code Playgroud)
当我分组时,我会根据origin.code和destination.code和serviceType属性对其进行分组。
我的聚合管道查询如下所示:
db.servicestats.aggregate([{$match:{$or:[{scenarioId:0}, {scenarioId:1}]}},
{$sort:{'origin.code':1,'destination.code':1,serviceType:1}},
{$group:{
_id:{originCode:'$origin.code',destinationCode:'$destination.code',serviceType:'$serviceType'},
baseScenarioId:{$sum:{$switch: {
branches: [
{
case: { $eq: [ '$scenarioId', 1] },
then: '$scenarioId' …Run Code Online (Sandbox Code Playgroud)