本文算是我的学习笔记,初学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();
}
}