MongoDB查找每个用户的上次提交

时间:2014-02-14 20:08:58

标签: 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。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

查询可以这样形成:

针对每个问题(比如说Teamcode问题),给我最后一次提交所有用户

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

- >查询:{“竞赛”:“团队代码”,“数据”:{$ 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} )