2015-01-26 96 views
0

假設文檔中有兩個字段updatedAtcreatedAt。但是,如果文檔尚未更新,則文檔不必具有updatedAt字段。在mongodb中按多個字段排序

我想通過這些字段進行排序,本質上是兩個字段合併到像someField另一個領域,做

db.stuff.find({}, {sort: {someField: -1}});

我想說的是,目前的組成排序 db.stuff.find({}, {sort: {createdAt: -1, updatedAt: -1}});

將按先創建然後更新進行排序。

回答

0

您可以使用聚合方法進行排序,項目等,如果你只是在尋找以下內容:由

  • 排序我createdAt
  • 具有相同createdAt各個領域,排序updatedAt

那麼下面的工作:

db.stuff.aggregate(
    [ 
    { $sort : { createdAt : -1, updatedAt: -1 } } 
    ] 
) 

我不是蘇re爲什麼您需要將兩個字段合併到另一個字段中

+1

我相信OP想要列出最近創建或更新的項目。因此,如果某個項目是昨天創建的,但在5分鐘前編輯過,它應該與5分鐘前創建(或更新)的項目一起顯示,而不是昨天在同一時間創建的其他項目。 – NoOutlet 2015-01-26 22:20:03

2

您可以使用聚合管道創建兩個字段的條件合併,其中$project$ifNull

db.stuff.aggregate([ 
    { $project: 
    { createdOrUpdatedAt: { $ifNull: ["$updatedAt", "$createdAt"] }, 
     fieldA: 1, 
     fieldB: 1, 
     fieldEtc: 1 } 
    }, 
    { $sort: { createdOrUpdatedAt: -1 } } 
]); 
+0

是否有沒有使用聚合做到這一點? – Maaz 2015-01-26 23:03:38

+1

據我所知,沒有比創建一個新的領域,並給它在文檔創建和文檔更新currentTime時間戳之外。 – NoOutlet 2015-01-26 23:08:54