MongDB java 操作

主要注意操作mongo-java-driver包的版本,个人以为应该也要注意安装安mongoDB数据的版本,最好能相对应比较好!

用记录ID号更新信息不能是

UpdateResult updateResult = collection.replaceOne(new BasicDBObject("_id", "58438f325967e41d208f5901"), 
         new Document("content","content123456789").append("comment_count", 99).append("title", "source123456789"));

而用是,千万要记住_id是一个ObjectId值而不是一个字符串,根php里操作有很大差别

UpdateResult updateResult = collection.replaceOne(new BasicDBObject("_id", new ObjectId("58438f325967e41d208f5901")), 
         new Document("content","content123456789").append("comment_count", 99).append("title", "source123456789"));

以下为相关操作的记录信息:
插入操作

        MongoClient mongoClient = new MongoClient( "localhost" , 27017);
        MongoDatabase db = mongoClient.getDatabase("shop");
        //进入某个文档集  
        MongoCollection<Document> collection = db.getCollection("animal");  
        //创建新文档
        create cat
        Document document = new Document("name", "tom").append("type", "cat").append("count", 10).append("info", new Document("high", 50).append("weight", 20));
        collection.insertOne(document);

        //创建一个包含多个文档的列表
        List<Document> documents = new ArrayList<Document>();
        for(int i=0; i<5; i++){
            documents.add(new Document("name", "tom"+i).append("type", "cat").append("count", 10).append("info", new Document("high", 50+i).append("weight", 20+i)));
        }
        collection.insertMany(documents);

读取操作

        //获取集合中的文档数量
        System.out.println("count===="+collection.count());

        //查询集合中的第一个文档
        Document myDocument = collection.find().first();
        System.out.println("find first===="+myDocument);

        //获取集合中的全部文档
        MongoCursor<Document> cursor = collection.find().iterator();
        while(cursor.hasNext()){
            System.out.println(cursor.next().toJson());
        }
        cursor.close();



        //获取全部数据的另一种方法
        FindIterable<Document > documents =  collection.find();
        for(Document document : documents){
            System.out.println("document====="+document);
        }


        //根据指定条件查询记录
        Document myDocument  = collection.find(new BasicDBObject("name", "tom")).first();
        System.out.println("myDocument==="+myDocument);

        //根据条件获取某分文档 eq:==
        Document myDoc = collection.find(new BasicDBObject("name", new BasicDBObject("$eq", "tom")) ).first();
        System.out.println("myDoc==="+myDoc);


        //查询id=5843e04f5f08a52288a06a99
        Document myDoc = collection.find(new BasicDBObject("_id", new ObjectId("5843e04f5f08a52288a06a99")) ).first();
        System.out.println("myDoc==="+myDoc);


        //查询name=tom   eq等于某个值
        Document myDoc2 = collection.find(new BasicDBObject("name", new BasicDBObject("$eq", "tom"))).first();
        System.out.println("eq.myDoc2==="+myDoc2);


        //查询count >=2   gte大于等于
        FindIterable<Document>  documents = collection.find(new BasicDBObject("count", new BasicDBObject("$gte", 2)));
        for(Document document:documents){
            System.out.println("document======"+document);
        }

        //查询info里的某个值测试失败
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("info", new BasicDBObject("high", new BasicDBObject("$gte", 10))));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }


        //小于等于50
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("count", new BasicDBObject("$lte", 10)));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }


        //查询不等于count!=9
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("count", new BasicDBObject("$ne", 9)));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }

        //查询name in tom/tom1/tom3
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("name", 
                new BasicDBObject(QueryOperators.IN, new String[]{"tom", "tom1", "tom3"})));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }


        //查询name not in tom/tom1/tom3
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("name", 
                                new BasicDBObject(QueryOperators.NIN, new String[]{"tom", "tom1", "tom3"})));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }


        //查询name2 字段不存在的记录
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("name2", 
        new BasicDBObject(QueryOperators.EXISTS, true)));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }


        // 对输出文档进行排序,-1为递减,1为递增  
        // 官方文档的例子有误:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#sorting-documents  
        // Document myDoc = collection.find(exists("i")).sort(new BasicDBObject("i", -1)).first(); 


        //-1为递减,1为递增  
        //-1等于倒序 DESC  1=顺序ASC
        FindIterable<Document>  documents2 = collection.find().sort(new BasicDBObject("name", -1));
        for(Document document:documents2){
            System.out.println("document======"+document);
        }        


        //类拟分页操作
        //获取总数
        long count = collection.count(new BasicDBObject("count",10));
        FindIterable<Document>  documents2 = collection.find(new BasicDBObject("count",10)).skip(1).limit(3).sort(new BasicDBObject("name",-1));
        System.out.println("count===="+count);
        for(Document document:documents2){
            System.out.println("document======"+document);
        } 



        // 选择性输出结果中的元素,0为不显示,1为显示  
        // 官方文档中的例子又不能用:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#projecting-fields  
         BasicDBObject exclude = new BasicDBObject();  
         exclude.append("_id", 0);  
         // exclude.append("count", 0);  
         exclude.append("name", 1);  
         exclude.append("info", 1);  
         Document myDoc = collection.find().projection(exclude).first();  
         System.out.println(myDoc.toJson());  

修改操作

        // 修改时的参数:  
        // $inc 对指定的元素加  
        // $mul 乘  
        // $rename 修改元素名称  
        // $setOnInsert 如果以前没有这个元素则增加这个元素,否则不作任何更改  
        // $set 修改制定元素的值  
        // $unset 移除特定的元素  
        // $min 如果原始数据更大则不修改,否则修改为指定的值  
        // $max 与$min相反  
        // $currentDate 修改为目前的时间  


        //修改第一个符合条件的数据  
        // $set 为修改  
        UpdateResult updateResult =  collection.updateOne(new BasicDBObject("name", "tom"), new Document("$set", new Document("count", 100)));  
         // 获取全部文档,可以看到以前10的地方变成了110  
         for (Document cur : collection.find()) {  
             System.out.println(cur.toJson());  
         }  


         //修改多条记录
         //所有count值小于100的记录添加100
         UpdateResult updateResult =  collection.updateMany(new BasicDBObject("count", new BasicDBObject("$lt",100)), 
                 new Document("$inc", new Document("count", 100)));         
         for (Document cur : collection.find()) {  
             System.out.println(cur.toJson());  
         }   

删除操作

        //删除第一条符合条件的数据
        DeleteResult deleteResult = collection.deleteOne(new BasicDBObject("name", "tom2"));
        System.out.println("deleteResult"+deleteResult);


        //删除符合条件的多条记录
        DeleteResult deleteResult2 = collection.deleteMany(new BasicDBObject("count", 110));
        System.out.println("deleteResult2"+deleteResult2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值