python - MongoDB 查找每个用户的最后一次提交

标签 python linux mongodb pymongo

我有很多这样结构的文档:

    "_id" : ObjectId("52be9d8dbfbc2c17e6a4e06b"),
"contest" : "Teamcode",
"data" : [
    {
        "status" : "0",
        "message" : "Correct",
        "runtime" : 0.10917782783508301,
        "score" : 20
    },
    {
        "status" : "0",
        "message" : "Correct",
        "runtime" : 0.12033200263977051,
        "score" : 20
    },
    {
        "status" : "0",
        "message" : "Correct",
        "runtime" : 0.35556793212890625,
        "score" : 20
    },
    {
        "status" : "0",
        "message" : "Correct",
        "runtime" : 1.8789710998535156,
        "score" : 20
    },
    {
        "status" : "0",
        "message" : "Correct",
        "runtime" : 0.9521079063415527,
        "score" : 20
    }
],
"id" : 242,
"lang" : "c",
"problem" : "roate",
"result" : [ ],
"score" : 100,
"status" : "done",
"time" : 1388223885.051975,
"user" : {
    "email" : "orizont1",
    "user_class" : 0,
    "name" : "orizont1"
}
   }

在一场比赛中,每个用户针对每个问题提交了多次。 我有一个名为“竞赛”的变量,我想针对每个问题获取每个用户的最后一次提交。我使用 pymongo。

我该怎么做?

最佳答案

查询可以这样形成:

对于每个问题(例如 Teamcode 问题),给我所有用户的最后一次提交

-> 查询时,请记住对象数组(数据)的大小大于等于 1。

-> query: { "contest": "Teamcode", "data": { $size: {$gte:1} } }

-> 投影:{"data":{$slice:-1}, id:1}。 $slice:-1 将为您提供每个文档中与查询匹配的对象数组(数据)的最后一个元素。

对于$slice,请阅读:

http://docs.mongodb.org/manual/reference/operator/projection/slice/#proj._S_slice

 YOUR_COLLECTION_NAME.find( { "contest": "Teamcode" , "data": { $size: {$gte:1} } }, {"data":{$slice:-1}, id:1} )

关于python - MongoDB 查找每个用户的最后一次提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788648/

相关文章:

python - 从 for 循环中更新的字典制作可滚动的绘图

php - php文件中的html内容不会在centos服务器中显示

mongodb - 汇总总和并查找另一个集合

node.js - Mongoose 聚合返回不需要的空数组

MongoDB - 解释特定的解释输出

python - 如何在 python 中获得单调持续时间?

python - 如何在 Pandas 中绘制具有不同 x 值的多个系列?

linux - 如何使用调试版的 libc

linux - Jenkins 的主人和奴隶以及环境。变量

Python:嵌套计数器