【问题标题】:Query in mongoDB to get records with different value and last added在 mongoDB 中查询以获取具有不同值和最后添加的记录
【发布时间】:2017-03-29 13:46:31
【问题描述】:

我有这样的shema:

var messageSchema = system.mongoose.Schema({
    from: {
        type: system.mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
    to: {
        type: system.mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'User'
    },
    content: {
        type: String,
        required: true
    },
    createDate: {
        type: Date,
        default: Date.now
    }
});

如何创建查询以获取每个用户的最后一条消息?

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    你可以使用聚合查询

    db.collection.aggregate([
        { "$sort" : { "createDate" : -1 } },
        {
            "$group" : {
                "_id" : "$from",
                "from" : { "$first" : "$from" },
                "to" : { "$first" : "$to" },
                "content" : { "$first" : "$content" },
                "createDate" : { "$first" : "$createDate" }
            }
        }
    ])
    

    【讨论】:

    【解决方案2】:

    您可以在此处使用累加器。最大累加器将按from分组,然后取最大值createdDate,返回最新的。

     db.messages.aggregate([
          {"$match":{}},
          {"$group":{
            "_id":"$from",
            "createdDate":{"$max":"$createdDate"},
            "content" : "$content"
            }
          },
          {"$sort":{"createdDate":-1}},{"$skip":0},{"$limit":10}],{})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多