вторник, 4 февраля 2014 г.

MongoDB. Homework week 2.

Homework 2.1
Итак, скачиваем предложный файл тут, импортируем его вот этой командой в наш mongo:
mongoimport -d students -c grades < grades.js
 После чего нам надо найти студента у которого самый маленький score среди тех, кто набрал больше 65 баллов. Пишем:
db.grades.find({type:"exam",score:{"$gte:65}}).sort({"score":1}).limit(3)
в итоге первая строчка с "_id" = 22.
Ответ: 22.

Homework 2.2
Наконец программирование, наконец Java!
Нам предлагают файл, скачанный тут изменить так, чтобы наименьшее поле с homework для каждого студента была удалено. Сделать это посредством Java, итак, приступим. Вот мой вариант решения:

import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MongoClient;import com.mongodb.QueryBuilder;
public class MainClass { public static void main(String[] args) throws UnknownHostException { MongoClient client = new MongoClient(); DB base = client.getDB("students"); DBCollection collection = base.getCollection("grades");
QueryBuilder builder = QueryBuilder.start("type").is("homework"); DBObject query = new BasicDBObject("type", "homework"); DBCursor cursor = collection.find(builder.get()).sort( new BasicDBObject("student_id", 1).append("score", 1)); int count = 2; try { while (cursor.hasNext()) {
DBObject cur = cursor.next(); collection.remove(cur); cursor.next(); System.out.println(cur); }
} finally { cursor.close(); }
}}

После чего пишем в mongo:
db.grades.aggregate({'$group':{'_id':'$student_id', 'average':{$avg:'$score'}}}, {'$sort':{'average':-1}}, {'$limit':1})
И получаем ответ, id = 54.

Homework 2.3
Тут я намучился с Python, оказывается последняя версия не подходит для валидации, по-этому ставим Python 2.7 и не повторяем моих ошибок. Скачиваем проект тут и меняем код, вернее добавляем в места, указанные XXXX. Мой код такой: 
1.BasicDBObject user = new BasicDBObject();
user.append("_id", username).append("password", passwordHash);
2.user.append("email", email);
3.usersCollection.insert(user);
4.user = usersCollection.findOne(new BasicDBObject("_id", username));
В целом все просто. После чего запускаем validate.py и видим ответ:
fhj837hf9376hgf93hf832jf9
На этом 2 неделя заканчивается.

Комментариев нет:

Отправить комментарий