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
?时间是时间戳(毫秒)