у меня есть список студенческих документов, который имеет структуру, как это:MongoDB Java: удалить элемент вложенного массива внутри документа на основе определенного состояния элементов
{
"_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» (последние 2 записи в массиве из 4 элементов). Схема и упорядочение типа счета согласованы и имеют одинаковый шаблон для всех учащихся. Ваша помощь приветствуется.
Это то, что я пытался достичь до сих пор:
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] (https://university.mongodb.com/) –
Вы пытались выполнить поиск самого низкого балла и ' $ pull' это? – Smutje