我试图在blood_category的不同值下计算blood_category的值,作为代码,我只能在blood_category的不同值下输出num_stock的总总和。如何将计数存储在一个数组中?下面是一个示例文档:
Blood_category:“血小板”blood_group:"A",num_stock:10 blood_category:“血小板”blood_group:"B",num_stock:10 blood_category:“全血”blood_group:A,num_stock:20 blood_category:“全血”blood_group:"B",num_stock:20
,我期待这样的输出:
{_id: "platelets", A:10, B:10},
{_id: "whole blood", A:20, B:20},我尝试过的代码:
Bloodinventory.aggregate([{$group: {_id : "$blood_category" , count :{$sum:"$num_stock"}}},{$sort: {_id: 1}}],function(err, inventory) {
res.json({ success: true, inventory: inventory });
});使用上述示例的,我的代码生成:
{_id: "platelets", count:20},
{_id: "whole blood", count:40},发布于 2019-01-15 13:45:08
使用当前的文档结构,我无法获得您想要的输出。但是,我可以使用修改过的文档结构来完成它,这可能会对您有所帮助。
这是您当前的文档结构:
db.blood.insertMany([
{ category: "platelet", group: "A", num_stock: 10 },
{ category: "platelet", group: "B", num_stock: 10 },
{ category: "whole blood", group: "A", num_stock: 20 },
{ category: "whole blood", group: "B", num_stock: 20 }
]);这是修改后的文档结构:
db.blood.insertMany([
{ category: "platelet", stock: { "A": 10 }},
{ category: "platelet", stock: { "B": 10 }},
{ category: "whole blood", stock: { "A": 20 }},
{ category: "whole blood", stock: { "B": 20 }}
]);使用修改后的文档结构,可以使用聚集管道算子 $mergeObjects。
db.blood.aggregate( [
{ $group: { _id: "$category", mergedCategories: { $mergeObjects: "$stock" } } }
])这意味着:
{ "_id" : "whole_blood", "mergedCategories" : { "A" : 20, "B" : 20 } }
{ "_id" : "platelet", "mergedCategories" : { "A" : 10, "B" : 10 } }对于使用当前文档结构的解决方案,我将查看$mergeObjects中提供的示例。
https://stackoverflow.com/questions/54200035
复制相似问题