我有一个find查询,它会返回一个对象列表:
{
"_id": "5fb94fda487b9348c4291450",
"name": [
{
"NewConfirmed": 642686,
"TotalConfirmed": 49315431,
"NewDeaths": 9555,
"TotalDeaths": 1242785,
"NewRecovered": 288131,
"TotalRecovered": 32473892
},
{
"NewConfirmed": 116262,
"TotalConfirmed": 6014461,
"NewDeaths": 4640,
"TotalDeaths": 371913,
"NewRecovered": 77575,
"TotalRecovered": 2492884
},
{
...
这一切都很好,但我正在尝试使用值为NewConfirmed
、TotalConfirmed
或NewDeaths
的状态参数进行新查询,以仅显示该特定字段。所以端点看起来像/something/status/:status
。
我已经尝试了一个带过滤器的聚合和一个简单的查找,但仍然没有找到任何结果。
有人知道吗?
首先,您需要一个具有以下结构的查询:
db.collection.aggregate([
{
/**Your match object*/
},
{
"$project": {
"YourStatus": {
"$first": "$name.YourStatus"
}
}
}
])
此处为示例。
使用mongoose
,您需要以以下方式创建对象查询:
var query = {}
query[status] = {"$first": "$name."+status}
并执行mongoose
查询,将对象替换为query
对象。
var aggregate = await model.aggregate([
{
//Your $match stage here
},
{
"$project": query
}
])
此外,我已经在本地进行了测试,但我的mongo版本(我认为(无法识别$first
,所以我使用了$arrayElemAt
。根据mongo的文档与$first
相同。
var status = "NewConfirmed"
var query = {}
query[status] = { $arrayElemAt: ["$name."+status, 0]}
您也可以将_id: 0
添加到$project
聚合中以不返回此字段。
var query = {_id:0} //Here add _id: 0 to project object
query[status] = { $arrayElemAt: ["$name."+status, 0]} //And the rest of the stage