我有一個資料庫,其中的記錄如下所示:
{
id: someId
initialValue: 100
currentValue: 150
creationDate: someDate
}
currentValue而且我必須得到和之間的差異最大的值initialValue。是否可以在 MongoDB 中撰寫一個排序函式,從另一個值中減去一個值,然后比較(排序)它們?
uj5u.com熱心網友回復:
稍微有點過分但可擴展的解決方案之一是使用$setWindowFields總和。如果將來需要進行更改,您可以通過設定其他功能來操作排名欄位。開箱即用的行為還提供了決勝局功能。$rank$subtract
db.collection.aggregate([
{
"$addFields": {
"diff": {
"$subtract": [
"$currentValue",
"$initialValue"
]
}
}
},
{
"$setWindowFields": {
"partitionBy": null,
"sortBy": {
"diff": -1
},
"output": {
"rank": {
$rank: {}
}
}
}
},
{
$sort: {
rank: 1
}
},
// cosmetics
{
"$unset": [
"diff",
"rank"
]
}
])
蒙戈游樂場
uj5u.com熱心網友回復:
當然,只需生成所需的值以首先在前一階段進行排序$addFields:
{
$addFields: {
diff: {
"$subtract": [
"$currentValue",
"$initialValue"
]
}
}
},
{
$sort: {
diff: -1
}
}
游樂場示例在這里
請注意,此操作不能使用索引,因此必須手動對資料進行排序。這可能是繁重和/或緩慢的操作。您可能希望在寫入檔案并將其編入索引時考慮保留該值。這會稍微增加寫入開銷,但會顯著減少執行讀取所需的作業量和時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529629.html
標籤:数据库mongodb
上一篇:except*在不可散列的例外上失敗-記錄的行為或錯誤?
下一篇:何時在Sql中有單獨的表
