MongoDB University 第三周作业——删除文档中的数组元素

前两周的作业比较简单,轻松搞定,这周的作业突然难起来了,费了好大劲儿写完,还有很多需要改进的地方,目前只能算是勉强实现了功能。

需求:

HOMEWORK: HOMEWORK 3.1

Download the students.json file from the Download Handout link and import it into your local Mongo instance with this command:

$ mongoimport -d school -c students < students.json

This dataset holds the same type of data as last week‘s grade collection, but it‘s modeled differently. You might want to start by inspecting it in the Mongo shell.

Write a program in the language of your choice that will remove the lowesthomework score for each student. Since there is a single document for each student containing an array of scores, you will need to update the scores array and remove the homework.

Remember, just remove a homework score. Don‘t remove a quiz or an exam!

Hint/spoiler: With the new schema, this problem is a lot harder and that is sort of the point. One way is to find the lowest homework in code and then update the scores array with the low homework pruned.

To confirm you are on the right track, here are some queries to run after you process the data with the correct answer shown:

Let us count the number of students we have:

> use school
> db.students.count() 
200

Let‘s see what Tamika Schildgen‘s record looks like:

> db.students.find( { _id : 137 } ).pretty( )
{
	"_id" : 137,
	"name" : "Tamika Schildgen",
	"scores" : [
		{
			"type" : "exam",
			"score" : 4.433956226109692
		},
		{
			"type" : "quiz",
			"score" : 65.50313785402548
		},
		{
			"type" : "homework",
			"score" : 89.5950384993947
		}
	]
}

To verify that you have completed this task correctly, provide the identity (in the form of their _id) of the student with the highest average in the class with following query that uses the aggregation framework. The answer will appear in the _id field of the resulting document.

> db.students.aggregate( { ‘$unwind‘ : ‘$scores‘ } , { ‘$group‘ : { ‘_id‘ : ‘$_id‘ , ‘average‘ : { $avg : ‘$scores.score‘ } } } , { ‘$sort‘ : { ‘average‘ : -1 } } , { ‘$limit‘ : 1 } )

Java 部分代码如下:

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import org.bson.BSONObject;
import org.bson.BasicBSONObject;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
public class Week3Homework1 {
    public static void main(String[] args) throws UnknownHostException {
        MongoClient client = new MongoClient();
        DB database = client.getDB("school");
        DBCollection collection = database.getCollection("students");
  
        
        DBObject query = new BasicDBObject("scores.type","homework");
        DBCursor cursor = collection.find(query)
        .sort(new BasicDBObject("_id",1));
        
        ArrayList<String> homeworks= new ArrayList<String>();
        float hw1stScore = 0;
        float hw2edScore = 0;
        float hwMaxScore = 0;
        int index = 0;
        BasicDBObject newScroes = new BasicDBObject();
        
        while(cursor.hasNext()){
        BasicDBObject cur = (BasicDBObject)cursor.next();
        
     
        @SuppressWarnings("unchecked")
ArrayList<BasicDBObject> scores=(ArrayList<BasicDBObject>)cur.get("scores");  
        
        if(!homeworks.isEmpty()){
        homeworks.clear();
        }
        
        
            for(BasicDBObject types:scores){              
            String type_name  = types.getString("type");            
                  
                if(type_name.equals("homework")){
                  homeworks.add(types.getString("score"));
                }      
            }
            
             hw1stScore = Float.parseFloat(homeworks.get(0));
             hw2edScore = Float.parseFloat(homeworks.get(1));    
             
             if (hw1stScore > hw2edScore){             
             hwMaxScore = hw1stScore;  
            index = 3;
             }else {
             hwMaxScore = hw2edScore;
             index = 2;
             }
             
             scores.remove(index);
             
             collection.update(new BasicDBObject("_id", cur.get("_id")), 
             new BasicDBObject("$set", new BasicDBObject("scores", scores)));
                 
            System.out.println(cur);
                          
 //           System.out.println("Student_name: " + cur.getString("name"));
  //          System.out.println("Student_id: " + cur.getString("_id"));
  //          System.out.println("Homework First Score:"+ hw1stScore);
  //          System.out.println("Homework Second Score:"+ hw2edScore);
   //         System.out.println("Highest Homework Score: " + hwMaxScore);
              System.out.println("=======");               
        
        }
        
    }
}
时间: 2024-10-10 17:52:09

MongoDB University 第三周作业——删除文档中的数组元素的相关文章

删除空白行+删除不可见内容+删除文档中某个样式+阻止快速样式切换

一.删除空白行 操作:编辑组中的替换---选择更多---特殊格式---点击两次 段落标记(替换行中)----点击一段落标记(被替换为) 二.删除不可见内容 操作:文件---检查问题---检查文档---是---检查(检查器对话框)---不可见内容  全部删除---重新检查确认是否删除完,然后再关闭 三.删除文档中某些样式 样式功能组---管理样式---导入/导出---选中所有需要删除的样式---删除 四.阻止快速样式切换 样式组功能---管理样式---限制---勾选阻止样式自动切换 原文地址:ht

MongoDB University 第五周作业——aggregate聚合高级查询

HOMEWORK: HOMEWORK 5.2 (HANDS ON) Crunching the Zipcode datasetPlease calculate the average population of cities in California (abbreviation CA) and New York (NY) (taken together) with populations over 25,000. For this problem, assume that a city nam

第三周pspo过程文档

团队协作:     日期/任务      听课        编写程序         阅读相关书籍 日总计          周一      110          60             30          200          周二            60                        60          周三                         40           40          周四      110          

批量删除文档中的注释和空行

1.空行  ^:b*$\n 2.注释  //.*\n

访问文档中的所有元素

<!doctype html> <html lang="en"> <head>   <meta charset="UTF-8">   <title>DOM Example</title>   <script type="text/JavaScript" src="exampleFindElements.js">   </script>

MongoDB创建、更新及删除文档

1.1插入并保存文档 插入是向MongoDB中添加数据的基本方法.对目标机使用insert方法,插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个"_id"键(要是原来没有的话),然后将其保存到MongoDB中. 1.1.1 批量插入 如果要插入多个文档,使用批量插入会快一些.批量插入能传递一个由文档构成的数组给数据库.只有插入多个文档到一个集合的时候,这种方式才会有用,而不能批量插入

Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签

【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies

一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTMLParser模块后,这项任务将变得易如反掌.首先,我们需要定义 一个新的HTMLParser类,以覆盖handle_starttag()方法,我们将使用这个方法来显示所有标签的HRef属性值. 定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象.然后,就可以使用u

使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)(转)

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签