mongodb - 在 Mongoose 上显示带有参数的对象列表
问题描述
我有一个查找查询,它返回一个对象列表:
{
"_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 docs与$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
推荐阅读
- spring-boot - Spring Boot Maven 插件:它实际上做了什么?
- reactjs - 在 useState 中使用对象作为状态时防止重新渲染
- android - 如何从本地存储中获取文件(pdf、jpg、docs)并创建文件
- angular - 在 Visual Studio 2019 中为 Angular 应用程序构建失败
- c# - 在 C# 的后台初始化 HalconWindow/HSmartWindowControlWPF
- verilog - 为什么在编程流光程序后LED仍然保持初始状态而模拟没有出错?
- php - FastExcel 导入附加字段数据
- java - Java中带有新行的HashMap列表到JSON字符串中
- r - 跨数据集和列匹配
- swift - 从共享表操作中快速删除应用程序