我有很多具有这种结构的文件:
"_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。
我该怎么做?
答案 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} )