我們在一個集合中有以下記錄:
{ "_id" : ObjectId("1"), "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("2"), "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("3"), "date" : ISODate("2017-03-03T00:00:00Z") }
{ "_id" : ObjectId("4"), "date" : ISODate("2017-02-02T00:00:00Z") }
{ "_id" : ObjectId("5"), "date" : ISODate("2017-03-01T00:00:00Z") }
{ "_id" : ObjectId("6"), "date" : ISODate("2017-02-01T00:00:00Z") }
{ "_id" : ObjectId("7"), "date" : ISODate("2017-01-02T00:00:00Z") }
{ "_id" : ObjectId("8"), "date" : ISODate("2017-01-03T00:00:00Z") }
$month如何通過ofdate欄位過濾最近的記錄,如下所示:
{ "_id" : ObjectId("3"), "date" : ISODate("2017-03-03T00:00:00Z") }
{ "_id" : ObjectId("5"), "date" : ISODate("2017-03-01T00:00:00Z") }
uj5u.com熱心網友回復:
$group- 按年份的第一天分組date并將檔案添加到data陣列中。$sort- 按_idDESC 排序。$skip$limit- 從結果中獲取第一個檔案。$unwinddata- 將陣列解構為多個檔案。$replaceWith- 用檔案替換data檔案。
db.collection.aggregate([
{
$group: {
_id: {
"$dateFromParts": {
"year": {
$year: "$date"
},
"month": {
$month: "$date"
},
"day": 1
}
},
data: {
$push: "$$ROOT"
}
}
},
{
$sort: {
_id: -1
}
},
{
$skip: 0
},
{
$limit: 1
},
{
$unwind: "$data"
},
{
$replaceWith: "$data"
}
])
示例 Mongo Playground
uj5u.com熱心網友回復:
如果您使用的是 collection.find() 方法,請同時使用 sort 方法。
像這樣 :collection.find().sort({created : -1})
如果要過濾,請查看一次:
collection.find({ $expr: {
$eq: [{ $month: "$date" }, 03]
}});
希望這可以幫助!。
uj5u.com熱心網友回復:
如果您愿意使用聚合,您可以使用
$month從日期獲取月份$match過濾值$sort按 ASC 或 DESC 排序$project保留或洗掉欄位
這是代碼
db.collection.aggregate([
{
"$addFields": {
month: { $month": "$date"}
}
},
{ "$match": { month: 3 } },
{ "$sort": { date: 1}},
{ "$project": { date: 1 } }
])
作業Mongo游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/477731.html
