我是MEAN堆栈的新手。我从我的一个API中获得了以下JSON作为输出。
GET方法:
router.get('/', function (req, res, next) {
var decoded = jwt.decode(req.query.token);
User.findById(decoded.user._id, function (err, user) {
if (err) {
return res.status(500).json({
title: 'An error occurred',
error: err
});
}
Treatment.find().sort('_id').limit(3)
.exec(function (err, treatments) {
if (err) {
return res.status(500).json({
title: 'An error occurred!',
error: err
});
}
res.status(200).json({
message: 'Success',
obj: treatments
});
});
});
});
JSON:
{
"message": "Success",
"obj": [
{
"_id": "5a3407b5b49aa6268419755f",
"patient": "5a3393ff963e821dc0f66598",
"t_date": "2017-12-15T17:30:45.365Z",
"symptoms": "fever,joint pain,headache,rash",
"signs": "changing levels of estrogen,dryness,nail breaks",
"review": ""
},
{
"_id": "5a3407cab49aa62684197562",
"patient": "5a3393ff963e821dc0f66598",
"t_date": "2017-12-15T17:35:45.365Z",
"symptoms": "fever,headache",
"signs": "nail breaks",
"review": ""
}
]
}
问题: 我需要计算一个症状在给定的日期范围内出现的次数,如我所附的表here。我如何计算出现次数? (症状字段类型是mongoDB中的字符串,症状可能会有所不同)
修改 我在客户端没有任何列表/下拉列表。它只是一个文本框。
答案 0 :(得分:2)
最后我能够从以下查询中完成。我认为这会帮助那些像我一样遇到同样问题的人。
mongoDB查询
db.treatments.aggregate([
{ $match: { t_date: { $lt: new Date() } } },
{ $project: { sym: { $split:["$symptoms",","] }}},
{ $unwind: "$sym"},
{ $group: { _id: {"symtomp" : "$sym"}, count:{ $sum:1 } } }
])
示例mongoDB结果
{ "_id" : { "symtomp" : "rash" }, "count" : 1 }
{ "_id" : { "symtomp" : "headache" }, "count" : 2 }
{ "_id" : { "symtomp" : "joint pain" }, "count" : 1 }
{ "_id" : { "symtomp" : "fever" }, "count" : 2 }
答案 1 :(得分:0)
您需要将症状字段作为字符串数组才能轻松完成。然后,Mongodb允许在“症状”字段列表中搜索包含特定值的所有文档。
e.g。
db.Treatment.find({"symptoms": "headache"}).count()