java mongodb 3.2_MongoDB java 3.2.2.jar

本文算是我的学习笔记,初学mongoDB, 若有问题请指出,谢谢.

package test;

import java.util.ArrayList;

import java.util.List;

import org.bson.Document;

import org.bson.conversions.Bson;

import org.bson.types.ObjectId;

import com.mongodb.MongoClient;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoCursor;

import com.mongodb.client.MongoDatabase;

import com.mongodb.client.model.Filters;

public class B {

@SuppressWarnings("resource")

public static void main(String[] args) {

MongoClient mongoClient = null;

try {

// 连接到 mongodb 服务

mongoClient = new MongoClient("localhost", 27017);

// 连接到数据库

MongoDatabase mongoDatabase = mongoClient.getDatabase("testDB");

System.out.println("Connect to database successfully");

// 链接集合

MongoCollection collection = mongoDatabase.getCollection("testDB");

// 创建集合

//createCollection(mongoDatabase);

更新数据

update(collection);

删除数据

//delete(collection);

插入数据

//insert(collection);

查看数据

check(collection);

} catch (Exception e) {

System.err.println(e.getClass().getName() + ": " + e.getMessage());

}

if (mongoClient != null) {

mongoClient.close();

}

}

/**

* 添加数据

*/

public static void createCollection(MongoDatabase mongoDatabase) {

mongoDatabase.createCollection("test_one");

}

/**

* 添加数据

*/

public static void insert(MongoCollection collection) {

List documents = new ArrayList<>();

List bsons = new ArrayList<>();

String sql1 = "{_id:9,test:4}";

String sql2 = "{$set:{student:[{name:'wangzhenjun'},{age:24},{tel:'18354276860'}]}}";

String sql3 = "{$unset:{student:1},{test:1}}";

documents.add(Document.parse(sql1));

// documents.add(Document.parse(sql2));

// documents.add(Document.parse(sql3));

bsons.addAll(documents);

System.err.println(documents.get(0).toJson());

// System.err.println(documents.get(1).toJson());

collection.insertMany(documents);

}

/**

* 查看数据

*/

public static void check(MongoCollection collection) {

FindIterable findIterable = collection.find();

MongoCursor mongoCursor = findIterable.iterator();

while (mongoCursor.hasNext()) {

System.out.println(mongoCursor.next());

}

System.err.println("****************");

Bson bson = null;

String sql = null;

// and 语句 name = 2 and type = 3

bson = Filters.and(Filters.eq("name", 2), Filters.eq("type", 3));

// or 语句 type = 2 or _id = 4 or _id= 3

bson = Filters.or(Filters.gt("type", 4), Filters.gt("_id", 4), Filters.lt("_id", 3));

// 参数为true ,显示存在key名"by"的数据;参数为false反之.

bson = Filters.exists("by", true);

// _id数据不为 5,6,2

bson = Filters.nin("_id", 5, 6, 2);

// _id数据不等于4

bson = Filters.ne("_id", 4);

// 查找key为type,value%2==0的数据

bson = Filters.mod("type", 2, 0);

// 下面这句等同 ne

bson = Filters.not(Filters.eq("_id", 4));

// like用法

bson = Filters.regex("title", "o");

// 3.2.2包支持下面这些写法(以前的包我也没试过),将查询语句直接转换成bson,不必使用上面的Filters.

// $where语句中的条件和java if()条件很相似,我觉得写法是最简单的,但很多网站都说最好不用$where,会影响查询速度.

sql = "{_id:{$eq:3}}"; // _id=3的数据

sql = "{name:'wangzhenjun',test:2}"; // name='wangzhenjun'&&test=2的数据

sql = "{_id:{$in:[1,2,3,4]}}"; // _id为1,2,3,4的数据

sql = "{$where:'this._id in [1,2,3,4]'}"; // 同上,但这句查询结果不对,用工具查也不对,缺少最后一个数据;

sql = "{_id:{$gt:3,$lt:6}}"; // _id>3&&_id<6的数据

sql = "{$where:'this.name == \"wangzhe\" '}"; // 必须要有this,字符串要有转译字符 \"

sql = "{student:{name:{$regex:'wang'}}}"; // 模糊查询student下name包含wang的数据

sql = "{'student.0.name':/tianxia/}";// 同上,key必须用单引号

sql = "{name:{$exists:true}}";// 存在name字段的数据

sql = "{$or:[{_id:2},{test:4}]}";// or 语句的用法

bson = Document.parse(sql);

System.err.println( Document.parse(sql).toJson());

findIterable = collection.find(bson);

mongoCursor = findIterable.iterator();

while (mongoCursor.hasNext()) {

System.out.println(mongoCursor.next());

}

}

/**

* 更新数据

*/

public static void update(MongoCollection collection) {

List documents = new ArrayList<>();

List bsons = new ArrayList<>();

String sql1 = "{$set:{name:'wangzhe'}}";

String sql2 = "{$set:{student:[{name:'tianxia',age:24,tel:'18354276860'},{name:'suting',age:24,tel:'1596'}]}}";

String sql3 = "{$unset:{student:1}}";

// documents.add(Document.parse(sql1));

documents.add(Document.parse(sql2));

// documents.add(Document.parse(sql3));

bsons.addAll(documents);

System.err.println(documents.get(0).toJson());

//collection.updateOne(Filters.eq("_id", 7), bsons.get(0));

collection.updateMany(Filters.gte("_id", 1), Filters.and(bsons));

}

/**

* 删除_id 为ObjectId("57457209fac7105d1dc8c2b1")的数据

*/

public static void delete(MongoCollection collection) {

ObjectId objid = new ObjectId("57457209fac7105d1dc8c2b1");

collection.deleteOne(Filters.eq("_id", objid));

}

}

2.Morphia基本操作

创建一个Bean

package bean;

import org.mongodb.morphia.annotations.Entity;

import org.mongodb.morphia.annotations.Id;

@Entity

public class UserBean {

@Id

private long _id;

private Integer age;

private String name;

public long get_id() {

return _id;

}

public void set_id(long _id) {

this._id = _id;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public UserBean() {

}

public UserBean(long _id,String name,Integer age) {

super();

this._id = _id;

this.name = name;

this.age = age;

}

@Override

public String toString(){

return "_id: "+this._id+",name:"+this.name+",age:"+this.age;

}

}测试代码

package test;

import java.util.ArrayList;

import java.util.List;

import org.junit.Test;

import org.mongodb.morphia.Datastore;

import org.mongodb.morphia.Key;

import org.mongodb.morphia.Morphia;

import org.mongodb.morphia.query.UpdateOperations;

import com.mongodb.MongoClient;

import com.mongodb.MongoClientException;

import bean.UserBean;

public class MorphiaTest {

private MongoClient mongoClient;

private Morphia morphia;

private Datastore datastore;

public MorphiaTest() {

try {

mongoClient = new MongoClient("127.0.0.1", 27017);

} catch (MongoClientException e) {

System.err.println(e.getClass().getName() + ": " + e.getMessage());

}

morphia = new Morphia();

morphia.map(UserBean.class);

System.err.println(mongoClient.getAddress());

datastore = morphia.createDatastore(mongoClient, "testDB");

}

public void print(Object object) {

if (object != null) {

System.err.println(object);

}

}

@Test

public void testMorphia(){

query();

inser();

update();

updateFirst();

check();

}

private void check() {

List> list = datastore.createQuery(UserBean.class).asKeyList();

for(Key key:list){

System.err.println(key.getCollection()+"-"+key.getClass()+"-"+key.getId()+"-"+key.getType());

}

}

private void query(){

System.err.println("--- query ---");

// createQuery

Iterable iterable = datastore.createQuery(UserBean.class).fetch();

while (iterable.iterator().hasNext()) {

print("fetch: "+iterable.iterator().next());

}

// 用find查并返回list<>

// name等于wang的数据,跳过4条,返回第5条与第6条

List list = datastore.find(UserBean.class, "name", "wang", 4, 2).asList();

for(UserBean u:list){

System.err.println("name = wang 的_id: " + u.get_id());

}

System.err.println("--- query over ---");

System.err.println();

}

private void inser() {

System.err.println("--- insert ---");

List users =new ArrayList<>();

for (int i=1;i<10;i++){

users.add(new UserBean(i,"wang",i));

}

print("save: " + datastore.save(users));

System.err.println("--- insert over ---");

System.err.println();

}

private void update() {

System.err.println("--- update ---");

UpdateOperations uo = datastore.createUpdateOperations(UserBean.class);

// 更新字段值

uo.set("name", "sujuan");

// 删除 age 字段

uo.unset("age");

print("update: " + datastore.update(datastore.find(UserBean.class,"_id",3).getKey(),uo).getUpdatedCount());

System.err.println("--- update over ---");

System.err.println();

query();

}

// 找到符合条件的第一条数据更新

private void updateFirst() {

System.err.println("--- updateFirst ---");

UpdateOperations uo = datastore.createUpdateOperations(UserBean.class);

// 更新 name 的值

uo.set("name", "zhehimingzi");

print("update: " + datastore.updateFirst(datastore.find(UserBean.class).field("age").greaterThan(4), uo).getUpdatedCount());

System.err.println("--- updateFirst over ---");

System.err.println();

query();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值