我正試圖進行這種計算,但我遇到了一些麻煩。有誰知道我怎樣才能在我的聚合中進行計算?我想做這樣的事情:
const test = await Test.aggregate( [
{
$sort: {
$divide: [
'value',
Math.pow(1. 1, new Date() - 'date')。)
],
},
},
]);
例如在這里,我想做1.1^number of days has passed。測驗模式有一個Float型別的 "值 "和一個date型別的日期。
uj5u.com熱心網友回復:
你有兩個問題:
你試圖在管道中使用javascript函式,雖然這可以通過使用$function來實作,但并不推薦,特別是如果你可以使用Mongodb運算子來執行相同的邏輯。
$sort階段有如下結構:
{ $sort: { <field1>: <sort order>, <field2>: <sort order> ...。} }
正如你所看到的,在你的例子中沒有被遵循,因為你試圖使用一個運算式。
那么我們怎樣才能解決這些問題呢?
那么你可以使用$pow代替Math.pow,$NOW代替new Date()和$subtract代替-的JavaScript操作。
你還需要添加一個 "sortField "來進行排序,以匹配$sort階段結構,所有這些看起來像這樣:
db.collection.aggregate( [
{
"$addFields"/span>: {
"sortField": {
$divide: [
"$value",
{
$pow: [...
1.1,
{
$subtract: [
"$$NOW",
"$date".
]
}
]
}
]
}
}
},
{
$sort: {
sortField: 1。
}
}
])
- 注意,減去日期將給你帶來
miliseconds的結果,你必須用它除以所需的數字(60 * 1000 * 60 * 24為一天)以得到正確的介值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307948.html
標籤:
上一篇:Mongoose--按分組和填充。獲得一個人曾經交談過的獨特的用戶串列,就像Whatsapp的第一個螢屏,你有所有以前的用戶。
