[英]How to get last defined value in an aggregration in MongoDB?
我有一個集合,其中的文檔有時包含status
字段,有時不包含。 總是有一個data
字段。 我正在嘗試形成一個查詢來獲取兩者的最新值,但是在使用$last
運算符時,我從最新文檔中獲取值並導致status
有時為null
。 如何獲取它以檢索最新定義的status
值,同時仍保留最新文檔中的data
值?
當前聚合:
const project = await collection.aggregate([
{
$match: {
projectId: id
}
},
{
$group: {
_id: '$projectId',
status: {
$last: '$status'
},
data: {
$last: '$data'
}
}
}
]).toArray();
您可以使用$facet
並在同一組文檔上並行執行多個查詢。
db.collection.aggregate([
{
$facet: {
last_status: [
{
"$match": {
status: {
$ne: null
}
}
},
{
"$sort": {
_id: -1
}
},
{
"$limit": 1
}
],
last_data: [
{
"$match": {
data: {
$ne: null
}
}
},
{
"$sort": {
_id: -1
}
},
{
"$limit": 1
}
]
}
},
{
"$project": {
other_fields: {
$first: "$last_data"
},
status: {
$first: "$last_status.status"
}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.