我正在研究在服务器端使用NodeJS而将MongoDB作为数据库而将Mongoose作为ORM的应用程序。
以下是mongo collection中的文档。
{
"rec_id": 73282,
"process_id": 73272,
"is_cancelled": false,
"process_status_progress": [
{
"state": {
"state_number": 1,
"state_name": "Step 1"
},
"last_update_date": 1499773230587,
"state_error": {}
},
{
"state": {
"state_number": 2,
"state_name": "Step 2"
},
"last_update_date": 1499773246295,
"state_error": {}
},
{
"state": {
"state_number": 3,
"state_name": "Step 3"
},
"last_update_date": 1499773508526,
"state_error": {
"error_message": "Some error message",
"error_details": {
"key": "value"
}
}
}
],
"job_status": "Step 3"
}
我正在执行下面的查询(选择最大进度状态小于状态编号9的文档):
db.processes.aggregate([
{
"$project": {
"maxState": {
"$max": "$process_status_progress.state.state_number"
},
"rec_id": 1,
"process_id": 1
}
},
{
"$match": {
"$or": [
{
"maxState": {
"$lt": 9
}
}
]
}
}
])
这将返回以下输出:
{" rec_id":1494929214467," process_id":1494929214501,
" maxState":3 }
" STATE_ERROR"对象将有键" error_message"和" error_details"如果处理过程中出现任何错误,那么" state_error"不会是空白。
对象将被添加到" process_status_progress"因为进程正在进一步处理。我刚才展示了上面的示例数据。因此,文档可能在" process_status_progress"数组字段。
如何从process_status_progress
返回具有状态编号最大值的整个对象,state_error
具有如下所示的任何数据?
{" rec_id":1494929214467," process_id":1494929214501,
" maxState":3," maxStateObj":{ "州":{ " state_number":3, " state_name":"步骤3" }, " last_update_date":1499773508526, " state_error":{" error_message" :"一些错误消息"," error_details" :{" key" :"价值"}}} }
这意味着我想获取最大状态(少于提供的状态编号。在这种情况下,它是9)的文档有错误并获取内部的对象" process_status_progress"以及。
我可以在单个Mongo查询中实现这一点,或者我必须获取数据然后编写循环以处理该数据吗?