使用
$range
聚合以查找数组的索引
courses
然后使用
$map
聚合和删除
("$$REMOVE")
索引不相等的字段
($ne)
到
0
对于蒙哥大
三点六
及以上
db.collection.aggregate([
{ "$addFields": {
"courses": {
"$map": {
"input": { "$range": [0, {"$size": "$courses" }] },
"in": {
"$let": {
"vars": { "c": {"$arrayElemAt": ["$courses", "$$this"]} },
"in": {
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"scheduledStartDate": { "$cond": [{ "$ne": ["$$this", 0] }, "$$REMOVE", "$$c.scheduledStartDate"] },
"scheduledEndDate": "$$c.scheduledEndDate",
"scheduledEndDate": { "$cond": [{ "$ne": ["$$this", 0] }, "$$REMOVE", "$$c.scheduledEndDate"] },
"transitionType": "$$c.transitionType"
}
}
}
}
}
}}
])
对于MongoDB
三点六
db.collection.aggregate([
{ "$addFields": {
"courses": {
"$map": {
"input": { "$range": [0, { "$size": "$courses" }] },
"in": {
"$let": {
"vars": { "c": { "$arrayElemAt": ["$courses", "$$this"] }},
"in": {
"$cond": [
{ "$eq": ["$$this", 0] },
{
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"scheduledStartDate": "$$c.scheduledStartDate",
"scheduledEndDate": "$$c.scheduledEndDate",
"stateName": "$$c.stateName",
"transitionType": "$$c.transitionType"
},
{
"stateName": "$$c.stateName",
"duration": "$$c.duration",
"lag": "$$c.lag",
"courseType": "$$c.courseType",
"transitionType": "$$c.transitionType"
}
]
}
}
}
}
}
}}
])
哪个将
return
[
{
"_id": "1234",
"completionStatus": "F",
"courses": [
{
"courseProgress": 100,
"courseType": "3",
"duration": "5",
"lag": "2",
"scheduledEndDate": ISODate("2018-12-01T08:31:30Z"),
"scheduledStartDate": ISODate("2018-11-27T08:31:30Z"),
"stateName": "Stage 1",
"transitionType": "onAssignment"
},
{
"courseType": "2",
"duration": "60",
"lag": "60",
"stateName": "2nd stage",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": "5",
"lag": "2",
"stateName": "3rd Stage",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": 1,
"lag": "10",
"stateName": "4th stage",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "1",
"lag": "0",
"stateName": "5th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "5",
"lag": "5",
"stateName": "6th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": 1,
"lag": "9",
"stateName": "7th ",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "66",
"lag": 0,
"stateName": "8th",
"transitionType": "onAssignment"
},
{
"courseType": "1",
"duration": "61",
"lag": 0,
"stateName": "9th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "80",
"lag": 0,
"stateName": "10th",
"transitionType": "onAssignment"
},
{
"courseType": "3",
"duration": "8",
"lag": 0,
"stateName": "11th",
"transitionType": "onAssignment"
}
],
"created": ISODate("2018-11-27T08:31:32.082Z"),
"currentState": {
"courseId": "116",
"courseProgress": 100
},
"modified": ISODate("2018-11-27T08:31:32.082Z"),
"userId": "23",
"userStatus": 1
}
]