nodejs + mongodb错误exception:FieldPath的“进度”不以$开头

我试图从这个查询(我从这里得到nodejs + mongoose – 查询聚合修改第二个pipe道

db.todos.aggregate([ { "$group": { "_id": "$pic", "open_count": { "$sum": { "$cond": [ { "$eq": [ "$status", "open" ] }, 1, 0 ] } }, "progress_count": { "$sum": { "$cond": [ { "$eq": [ "$status", "progress" ] }, 1, 0 ] } }, "done_count": { "$sum": { "$cond": [ { "$eq": [ "$status", "done" ] }, 1, 0 ] } }, "archive_count": { "$sum": { "$cond": [ { "$eq": [ "$status", "archive" ] }, 1, 0 ] } } } }, { "$group": { "_id": "$_id", "detail": { "$push": { "name": "open", "$todos": "$open_count" }, "$push": { "name": "progress", "$todos": "$progress_count" }, "$push": { "name": "done", "$todos": "$done_count" }, "$push": { "name": "archive", "$todos": "$archive_count" } } } }, { "$project": { "_id": 0, "pic": "$_id", "detail": 1 } } ]) 

我想要这种JSON结构,所以我可以把它放在谷歌图表,格式是这样的:

 [ { "pic": "A", "detail": [ { "name": "open", "todos": 2 }, { "name": "progress", "todos": 1 }, { "name": "done", "todos": 8 }, { "name": "archive", "todos": 20 } ], "pic": "B", "detail": [ { "name": "open", "todos": 5 }, { "name": "progress", "todos": 2 }, { "name": "done", "todos": 5 }, { "name": "archive", "todos": 10 } ], } ] 

但是我得到了这个错误

 exception: FieldPath 'progress' doesn't start with $ 

试试这个聚合查询:

 db.todos.aggregate([ { "$group": { "_id": { "pic": "$pic", "name": "$status" }, "todos": { "$sum": 1 } } }, { "$project": { "_id": 0, "pic": "$_id.pic", "detail": { "name": "$_id.name", "todos": "$todos" } } }, { "$group": { "_id": "$pic", "detail": { "$push": "$detail" } } }, { "$project": { "_id": 0, "pic": "$_id", "detail": 1 } }])