【发布时间】:2018-08-24 04:45:05
【问题描述】:
我有一个学生文档列表,其结构如下:
{
"_id" : 0,
"name" : "aimee Zank",
"scores" : [
{
"type" : "exam",
"score" : 1.463179736705023
},
{
"type" : "quiz",
"score" : 11.78273309957772
},
{
"type" : "homework",
"score" : 6.676176060654615
},
{
"type" : "homework",
"score" : 35.8740349954354
}
]
}
如您所见,每个学生都有一个包含 4 个分数的列表。 我需要删除每个学生文档的最低“作业”分数。每个学生都有 2 个“homewok”类型分数的条目(4 个元素的数组中的最后 2 个条目)。分数类型的模式和顺序是一致的,并且对所有学生都有相同的模式 感谢您的帮助。
这是我迄今为止努力实现的目标:
DBCursor cursor = collection.find();
try {
while(cursor.hasNext()) {
BasicDBObject doc = (BasicDBObject) cursor.next();
BasicDBList scoreList = (BasicDBList) doc.get("scores");
BasicDBObject hw1 = (BasicDBObject) scoreList.get("2");
double hw1Score = hw1.getDouble("score");
BasicDBObject hw2 = (BasicDBObject) scoreList.get("3");
double hw2Score = hw2.getDouble("score");
if (hw1Score > hw2Score) {
BasicDBObject update = new BasicDBObject("scores.score", hw2Score);
collection.update(doc, new BasicDBObject("$pull",update));
} else {
BasicDBObject update = new BasicDBObject("scores.score", hw1Score);
collection.update(doc, new BasicDBObject("$pull",update));
}
System.out.println(doc);
}
} finally {
cursor.close();
}
}
【问题讨论】:
-
您是否尝试过任何方法来实现这一目标?如果是,请分享
-
@PradeepSimha 可能不是因为这是从university.mongodb.com借来的一个众所周知的家庭作业问题
-
你试过搜索最低分和
$pull吗? -
对不起,我看不出你的问题是什么。请不要只问“我该怎么做?”
-
我只是找不到根据数组元素的某些条件删除数组元素的java示例