Mongodb 限制推送组中返回的项目

Mongodb 限制推送组中返回的项目,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我需要按发件人(fleche)分组,并从每个发件人处获取最后一条消息。。我使用$push和$group成功实现了这个想法,但它会返回每个“fleche”(发送者)的所有消息。与消息日期相同,最后一个元素应足够大。是否可以在mongo 2.6.6上使用聚合框架 预期结果、我的实际查询的实际结果、实际查询和邮件收集示例如下: 预期结果: "result" : [ { "_id" : 1, "date" : [ 14219488518

我需要按发件人(fleche)分组,并从每个发件人处获取最后一条消息。。我使用$push$group成功实现了这个想法,但它会返回每个“fleche”(发送者)的所有消息。与消息日期相同,最后一个元素应足够大。是否可以在mongo 2.6.6上使用聚合框架
预期结果、我的实际查询的实际结果、实际查询和邮件收集示例如下:
预期结果:

"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2" 
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2"

        ]
    }
"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800, 
            1421947200606, 
            1421947163929, 
            1421947153646, 
            1421946853567
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfencore didon ! fds 2", 
            "fsd fds fds 2", 
            "safdsfdsfs sdf fie2", 
            "salut la companie"
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593, 
            1421947176679, 
            1421947098168
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfsdffsd ss fds 2", 
            "salut la companie"
        ]
    }
{
    "_id" : ObjectId("54c12fe5a48da55ee08c7804"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421946853567,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c130daa48da55ee08c7805"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947098168,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13111a48da55ee08c7807"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947153646,
    "mess" : "safdsfdsfs sdf fie2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c1311ba48da55ee08c7808"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947163929,
    "mess" : "fsd fds fds 2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13128a48da55ee08c7809"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947176679,
    "mess" : "fssdfsdffsd ss fds 2",
    "lu" : 0
}
实际查询的实际结果:

"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2" 
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2"

        ]
    }
"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800, 
            1421947200606, 
            1421947163929, 
            1421947153646, 
            1421946853567
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfencore didon ! fds 2", 
            "fsd fds fds 2", 
            "safdsfdsfs sdf fie2", 
            "salut la companie"
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593, 
            1421947176679, 
            1421947098168
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfsdffsd ss fds 2", 
            "salut la companie"
        ]
    }
{
    "_id" : ObjectId("54c12fe5a48da55ee08c7804"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421946853567,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c130daa48da55ee08c7805"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947098168,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13111a48da55ee08c7807"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947153646,
    "mess" : "safdsfdsfs sdf fie2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c1311ba48da55ee08c7808"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947163929,
    "mess" : "fsd fds fds 2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13128a48da55ee08c7809"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947176679,
    "mess" : "fssdfsdffsd ss fds 2",
    "lu" : 0
}
实际查询:

db.messages.aggregate([

    {$match :{cible :2 , lu:0} } ,
    { $sort : { date : -1 } },
    { $group : {_id : "$fleche", date : { $push : "$date" } , mess :{$push: "$mess" }   } } ,
    {$limit:20}

])
消息收集示例:

"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2" 
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2"

        ]
    }
"result" : [ 
    {
        "_id" : 1,
        "date" : [ 
            1421948851800, 
            1421947200606, 
            1421947163929, 
            1421947153646, 
            1421946853567
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfencore didon ! fds 2", 
            "fsd fds fds 2", 
            "safdsfdsfs sdf fie2", 
            "salut la companie"
        ]
    }, 
    {
        "_id" : 3,
        "date" : [ 
            1421948859593, 
            1421947176679, 
            1421947098168
        ],
        "mess" : [ 
            "dernier mess ffsdfsdfsd 2", 
            "fssdfsdffsd ss fds 2", 
            "salut la companie"
        ]
    }
{
    "_id" : ObjectId("54c12fe5a48da55ee08c7804"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421946853567,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c130daa48da55ee08c7805"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947098168,
    "mess" : "salut la companie",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13111a48da55ee08c7807"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947153646,
    "mess" : "safdsfdsfs sdf fie2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c1311ba48da55ee08c7808"),
    "fleche" : 1,
    "cible" : 2,
    "date" : 1421947163929,
    "mess" : "fsd fds fds 2",
    "lu" : 0
}
{
    "_id" : ObjectId("54c13128a48da55ee08c7809"),
    "fleche" : 3,
    "cible" : 2,
    "date" : 1421947176679,
    "mess" : "fssdfsdffsd ss fds 2",
    "lu" : 0
}
你可以用手术室

输出将是:

{
    "result" : [ 
        {
            "_id" : 1,
            "date" : 1421947163929,
            "mess" : "fsd fds fds 2"
        }, 
        {
            "_id" : 3,
            "date" : 1421947176679,
            "mess" : "fssdfsdffsd ss fds 2"
        }
    ],
    "ok" : 1
}

很抱歉,我没有真正阅读这个问题,但是使用$first而不是$pull,然后看看发生了什么事情。。谢谢使用$last@user4406273多漂亮的把戏啊,埃克塞伦@Disposer-您可以发布一个有效的解决方案,以便对其他人有所帮助。@Disposer您认为忽略$limit可以得到一个计数结果吗?分页可能很好,我是否需要在单独的查询中计算总数?@user4406273分页在聚合中会很困难,我有几天不在家,但我会继续工作it@4406273,因为聚合以文档而不是游标的形式返回其结果,所以除了$limit之外没有其他方法,但您可以使用allowDiskUse(link)并将结果存储到另一个集合中,然后查询您的新集合,我没有想到其他方法;)