在集合中,我有這樣的條目:
{
_id: new ObjectId("61cae11f8fc0b2e3b045be04"),
location: 'Station One',
datetime: 2019-02-02T12:54:57.937Z,
sensorType: 'temperature',
value: -1.8,
__v: 0
},
{
_id: new ObjectId("61cae11f8fc0b2e3b045be05"),
location: 'Station two',
datetime: 2019-02-02T09:49:39.200Z,
sensorType: 'temperature',
value: -2,
__v: 0
},
當我進行聚合查詢時,我會匹配某些內容,例如要包含的日期等,然后在分組中,我想在匹配的時間段內搜索該站的最低和最高溫度。我有以下分組部分
let group = {
_id: {location: '$location'},
max: { $max: '$value' },
min: { $min: '$value' },
}
這給了我正確的結果,如下所示:
[
{
_id: { location: "Station One" },
max: 2.3,
min: -22.4
},
{
_id: { location: 'Station Two' },
max: 9.8,
min: -9.8
}
]
我想要做的是為記錄的特定溫度添加日期時間,如下所示:
[
{
_id: { location: "Station One" },
max: 2.3, **DATETIME HERE**
min: -22.4 **DATETIME HERE**
},
{
_id: { location: 'Station Two' },
max: 9.8, **DATETIME HERE**
min: -9.8 **DATETIME HERE**
}
]
我對 mongo 很陌生,我嘗試了各種方法都沒有成功,例如:
let group = {
_id: {location: '$location'},
max: { $max: '$value', $first: '$datetime' },
min: { $min: '$value' },
}
這次嘗試給了我一個錯誤,即 max 必須有一個累加器。
如何將日期時間添加到最小值和最大值?
uj5u.com熱心網友回復:
歸功于@Prasad_ 的推薦,聚合管道可以簡化為:
$sort- 排序location和value升序。$group- 分組location。使用$firstmin 獲取檔案value。$last以 max 獲取檔案value。$project- 裝飾輸出檔案。
db.collection.aggregate([
{
$sort: {
location: 1,
value: 1
}
},
{
$group: {
_id: {
location: "$location"
},
min: {
$first: "$$ROOT"
},
max: {
$last: "$$ROOT"
}
}
},
{
$project: {
_id: 1,
max: {
value: "$max.value",
datetime: "$max.datetime"
},
min: {
value: "$min.value",
datetime: "$min.datetime"
}
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/396881.html
上一篇:TypeScript:API總是回傳空物件{[key:string]:any}
下一篇:單擊表單時頁面重定向
