如何在分组记录旁边的mongodb组中获取最早的记录?

时间:2018-08-28 07:38:37

标签: mongodb aggregate

我有一组记录,并尝试获取每一行的唯一记录,并且唯一记录是组,查询是

db.collection.aggregate([
{ 
    $match : { 
        userId: 16,
        userListId : ObjectId('5b7e85f956de7e6ead026e23') ,

    } 
},
{
    $group: 
    {
        _id: '$domain',
        "websites": { $push: {
            '_id' : '$_id',
            'userId' : '$userId',
            'userListId' : "$userListId",
            'createdAt' : '$createdAt'
        }}
    }
}

]);

对于同一个域,我有4行

{
        "_id" : ObjectId("5b7e55bb0f81ba2c5b0b54c8"),
        "userId" : 16,
        "userListId" : ObjectId("5b7e85f956de7e6ead026e23"),
        "createdAt" : 1535006139565.0
    }, 
    {
        "_id" : ObjectId("5b7e55bb0f81ba2c5b0b54a9"),
        "userId" : 16,
        "userListId" : ObjectId("5b7e85f956de7e6ead026e23"),
        "createdAt" : 1535006139564.0
    }, 
    {
        "_id" : ObjectId("5b7e55bb0f81ba2c5b0b54b4"),
        "userId" : 16,
        "userListId" : ObjectId("5b7e85f956de7e6ead026e23"),
        "createdAt" : 1535006139565.0
    }, 
    {
        "_id" : ObjectId("5b7e55bb0f81ba2c5b0b54c4"),
        "userId" : 16,
        "userListId" : ObjectId("5b7e85f956de7e6ead026e23"),
        "createdAt" : 1535006139565.0
    }

在上面的记录中,第二个记录是数据库中的第一个记录,我想将其放在第一个位置,该怎么做?

"_id" : ObjectId("5b7e55bb0f81ba2c5b0b54a9")

我想在第一位置获得以上记录

1 个答案:

答案 0 :(得分:3)

您可以简单地通过$ sort运算符开始管道:

db.collection.aggregate([
  {
    $match: {
      userId: 16,
      userListId: ObjectId("5b7e85f956de7e6ead026e23"),

    }
  },
  {
    $sort: {
      "createdAt": 1
    }
  },
  {
    $group: {
      _id: "$domain",
      "websites": {
        $push: {
          "_id": "$_id",
          "userId": "$userId",
          "userListId": "$userListId",
          "createdAt": "$createdAt"
        }
      }
    }
  }
])

看到它正常工作here

注意:已根据@chridam建议进行了更新。谢谢。