第6章的代码-林子雨编著《大数据基础编程、实验和案例教程(第3版)》教材

大数据学习路线图

林子雨编著《大数据基础编程、实验和案例教程(第3版)》(教材官网)教材中的命令行和代码,在纸质教材中的印刷效果不是很好,可能会影响读者对命令行和代码的理解,为了方便读者正确理解命令行和代码或者直接拷贝命令行和代码用于上机实验,这里提供全书配套的所有命令行和代码。
查看教材所有章节的代码

第6章 典型NoSQL数据库的安装和使用

(温馨提示:代码框上方的复制代码按钮,也就是“两张A4纸图标”,用鼠标点击复制代码按钮,就可以把代码框中的代码复制到粘贴板,粘贴到其他地方。但是,有的浏览器可能不支持该功能)

教材第91页

cd ~
sudo tar -zxvf ./Downloads/redis-6.0.6.tar.gz -C /usr/local
cd /usr/local
sudo mv ./redis-6.0.6 ./redis
sudo chown -R hadoop:hadoop ./redis
cd /usr/local/redis
sudo make
sudo make install
cd /usr/local/redis
./src/redis-server
cd /usr/local/redis
./src/redis-cli

教材第92页

cd /usr/local/redis
./src/redis-cli -p 6379 --raw

教材第94页

import java.util.Map;
import redis.clients.jedis.Jedis;

public class JedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost",6379);
        jedis.hset("student.scofield", "English","45");
        jedis.hset("student.scofield", "Math","89");
        jedis.hset("student.scofield", "Computer","100");
        Map<String,String>  value = jedis.hgetAll("student.scofield");
        for(Map.Entry<String, String> entry:value.entrySet())
        {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }
}

教材第95页

sudo tar -zxvf ~/Downloads/mongodb-linux-x86_64-ubuntu1604-4.4.22.tgz -C /usr/local #解压
cd /usr/local
sudo mv mongodb-linux-x86_64-ubuntu1604-4.4.22 mongodb  #更名为mongodb
sudo chown -R hadoop mongodb
sudo mkdir -p /data/db/journal   #创建目录
sudo chown -R hadoop /data  #把目录的权限赋予给hadoop用户
cd /data/db/journal
touch mongodb.log  #创建日志文件
vim /data/mongodb.conf
#日志文件位置
logpath=/data/db/journal/mongodb.log

# 以追加方式写入日志
logappend=true

# 是否以守护进程方式运行
fork=true

# 默认27017
#port = 27017

# 数据库文件位置
dbpath=/data/db
cd /usr/local/mongodb
./bin/mongod -f /data/mongodb.conf

教材第96页

pgrep mongo -l
cd /usr/local/mongodb
./bin/mongo
> use admin
> db.shutdownServer()

教材第97页

cd /usr/local/mongodb
./bin/mongod -f /data/mongodb.conf
cd /usr/local/mongodb
./bin/mongo
> use School
> db.createCollection('teacher')

教材第98页

> db.student.insert({_id:1, sname: 'zhangsan', sage: 20})  #_id可选
> db.student.save({_id:1, sname: 'zhangsan', sage: 22})  #_id可选
> s=[{sname:'lisi',sage:20},{sname:'wangwu',sage:20},{sname:'chenliu',sage:20}]
> db.student.insert(s)
> db.student.find()

教材第99页

> db.youCollection.find(criteria, filterDisplay)
> db.student.find()
> db.student.find({sname: 'lisi'})
> db.student.find({},{sname:1, sage:1})
> db.student.find({sname: 'zhangsan', sage: 22})
> db.student.find({$or: [{sage: 22}, {sage: 25}]})
> db.youCollection.update(criteria, objNew, upsert, multi )

教材第100页

> db.student.update({sname: 'lisi'}, {$set: {sage: 30}}, false, true)
> db.student.remove({sname: 'chenliu'})

教材第101页

> db.student.drop()
import java.util.ArrayList;
import java.util.List; 
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters; 
public class TestMongoDB {
    /**
     * @param args
     */
    public static void main(String[] args) {
//      insert();//插入数据。执行插入时,可将其他三句函数调用语句注释,下同
        find(); //查找数据
//      update();//更新数据
//      delete();//删除数据
    }
    /**
     * 返回指定数据库中的指定集合
     * @param dbname 数据库名
     * @param collectionname 集合名
     * @return
     */
    //MongoDB无需预定义数据库和集合,在使用的时候会自动创建
    public static MongoCollection<Document> getCollection(String dbname,String collectionname){
        //实例化一个mongo客户端,服务器地址:localhost(本地),端口号:27017
        MongoClient  mongoClient=new MongoClient("localhost",27017);
        //实例化一个mongo数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(dbname);
        //获取数据库中某个集合
        MongoCollection<Document> collection = mongoDatabase.getCollection(collectionname);
        return collection;
    }
    /**
     * 插入数据
     */
    public static void insert(){
        try{
            //连接MongoDB,指定连接数据库名,指定连接表名。
            MongoCollection<Document> collection= getCollection("School","student");    //数据库名:School 集合名:student
            //实例化一个文档,文档内容为{sname:'Mary',sage:25},如果还有其他字段,可以继续追加append
            Document doc1=new Document("sname","Mary").append("sage", 25);
            //实例化一个文档,文档内容为{sname:'Bob',sage:20}
            Document doc2=new Document("sname","Bob").append("sage", 20);
            List<Document> documents = new ArrayList<Document>(); 
            //将doc1、doc2加入到documents列表中
            documents.add(doc1); 
            documents.add(doc2); 
            //将documents插入集合
            collection.insertMany(documents);  
            System.out.println("插入成功"); 
        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
    /**
     * 查询数据
     */
    public static void find(){
        try{
            MongoCollection<Document> collection = getCollection("School","student");  //数据库名:School 集合名:student
            //通过游标遍历检索出的文档集合 
//          MongoCursor<Document>  cursor= collection.find(new Document("sname","Mary")). projection(new Document("sname",1).append("sage",1).append("_id", 0)).iterator();   //find查询条件:sname='Mary'。projection筛选:显示sname和sage,不显示_id(_id默认会显示)
            //查询所有数据
            MongoCursor<Document>  cursor= collection.find().iterator();
            while(cursor.hasNext()){
                System.out.println(cursor.next().toJson());
            }
        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
    /**
     * 更新数据
     */
    public static void update(){
        try{
            MongoCollection<Document> collection = getCollection("School","student");  //数据库名:School 集合名:student
             //更新文档,将文档中sname='Mary'的文档修改为sage=22   
             collection.updateMany(Filters.eq("sname", "Mary"), new Document("$set",new Document("sage",22)));  
             System.out.println("更新成功!");
        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
    /**
     * 删除数据
     */
    public static void delete(){
        try{
            MongoCollection<Document> collection = getCollection("School","student");  //数据库名:School 集合名:student
                //删除符合条件的第一个文档  
            collection.deleteOne(Filters.eq("sname", "Bob"));  
            //删除所有符合条件的文档  
            //collection.deleteMany (Filters.eq("sname", "Bob"));
            System.out.println("删除成功!");
        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
}