我有這個簡單的檔案設定:
dateAdded: 日期格式為 'YYYY-MM-DD' 的字串lastFetched: 日期物件(ISODatemongodb 語言)
{
lastFetched: 2021-03-01T09:27:07.406 00:00
dateAdded: "2020-12-19"
}
如何找到lastFetched小于的檔案dateAdded?就像是:
db.collection.find( { lastFetched: {$lt: ISODate('$dateAdded')} } )
為此,我首先需要轉換為lastFetched日期字串或物件。dateAddedISODate
但更重要的是:如何使用欄位的值作為條件檢查的輸入?一個更簡單的版本是:
{
lastFetched: "2021-03-01"
dateAdded: "2020-12-19"
}
使用以下偽查詢:
db.collection.find( { lastFetched: {$lt: '$dateAdded'} } )
我已經嘗試使用$addFields(聚合)作為第一步:
{
date: ISODate('$dateAdded')
}
但這只是給了我一個日期1970-01-01T00:00:00.000 00:00。
非常歡迎任何幫助!
謝謝
uj5u.com熱心網友回復:
感謝@Joe 的$expr提示。這是我未來版本的解決方案:
創建以下聚合階段。第一階段將該ISODate欄位替換為與格式 (YYYY-MM-DD)lastFetched匹配的字串版本。dateAdded然后用于$expr檢查該欄位。
[
{
'$addFields': {
'lastFetched': {
'$dateToString': {
'date': '$lastFetched',
'format': '%Y-%m-%d'
}
}
}
}, {
'$match': {
'$expr': {
'$lt': [
'$lastFetched', '$dateAdded'
]
}
}
}
]
uj5u.com熱心網友回復:
沒有必要添加額外的$addFields階段,并且在大多數情況下,最好盡量減少階段的數量。ISODate您可以在階段轉換為行內$match:
db.foo.aggregate([
{'$match': {'$expr': {
'$lt': [{'$dateToString':{'date':'$lastFetched','format':'%Y-%m-%d'}},
'$dateAdded'
]
}}}
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422845.html
標籤:
上一篇:HBase存盤檔案存盤位置
