主要注意操作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);