在Mongoose上显示带有参数的对象列表



我有一个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
},
{
...

这一切都很好,但我正在尝试使用值为NewConfirmedTotalConfirmedNewDeaths的状态参数进行新查询,以仅显示该特定字段。所以端点看起来像/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

最新更新