MongoDB返回每个字段的最新记录
假设我有这个MongoDB返回每个字段的最新记录,mongodb,mongodb-query,Mongodb,Mongodb Query,假设我有这个房间集合: { room: 'room1', owner: 'user1', time: 'time1' }, { room: 'room1', owner: 'user1', time: 'time2' }, { room: 'room2', owner: 'user1', time: 'time3' }, { room: 'room2', owner: 'user1', time
房间
集合:
{
room: 'room1',
owner: 'user1',
time: 'time1'
},
{
room: 'room1',
owner: 'user1',
time: 'time2'
},
{
room: 'room2',
owner: 'user1',
time: 'time3'
},
{
room: 'room2',
owner: 'user1',
time: 'time4'
},
{
room: 'room3',
owner: 'user1',
time: 'time5'
},
{
room: 'room3',
owner: 'user1',
time: 'time6'
}
在应用程序中,我有一组房间:[room1,room2,room3]
如何按时间检索rooms数组中每个房间的最新记录?例如,查询应返回以下内容:
{
room: 'room1',
owner: 'user1',
time: 'time2'
},
{
room: 'room2',
owner: 'user1',
time: 'time4'
},
{
room: 'room3',
owner: 'user1',
time: 'time6'
}
使用mongoDB
1> 首先要符合你的标准
2> 按时间排序
3> 按房间分组
4> 项目字段
检查以下聚合查询:
db.collectionName.aggregate({
"$match": {
"room": {
"$in": ["room1", "room2", "room3"] //macth criteria
}
}
}, {
"$sort": {
"time": -1 //sort by time
}
}, {
"$group": {
"_id": "$room", // group by room
"room": {
"$first": "$room" // used mongo $first method
},
"owner": {
"$first": "$owner"
},
"time": {
"$first": "$time"
}
}
}, {
"$project": { //project all fileds
"_id": 0,
"room": "$room",
"owner": "$owner",
"time": "$time"
}
})
如果您的收藏文档大小大于$sort
需要时间进行排序和分组,请使用以下方法代替$sort
:
db.collectionName.aggregate({
"$match": {
"room": {
"$in": ["room1", "room2", "room3"]
}
}
}, {
"$group": {
"_id": "$room",
"time": {
"$max": "$time" // use $max
},
"room": {
"$first": "$room"
},
"owner": {
"$first": "$owner"
}
}
}, {
"$project": {
"_id": 0,
"room": "$room",
"owner": "$owner",
"time": "$time"
}
})
是
time
数据类型string
?时间是时间戳(毫秒)