package ali;
/*import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import org.bson.types.ObjectId;
import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.gridfs.model.GridFSDownloadByNameOptions;
import com.mongodb.client.gridfs.model.GridFSFile;
public class TestMongodb {
public static void main(String[] args) throws Exception {
MongoClient mongoClient = new MongoClient("127.0.0.1" , 27017 );
MongoDatabase db = mongoClient.getDatabase("mydb");
MongoCollection<Document> col = db.getCollection("foo");
// insertM(db);
MongoCursor<Document> cursor ;
Document doc = new Document();
// 查询全部
/*cursor = col.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}*/
/*// 使用查询条件
// 首先导入 import static com.mongodb.client.model.Filters.*;
doc = col.find(eq("i", 5)).first(); // i 等于5 的第一个文档
System.out.println(doc.toJson());*/
/*cursor = col.find(and(gt("i", 5), lte("i", 10))).iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}*/
// 排序
// doc = col.find(exists("i")).sort(descending("i")).first();
// System.out.println(doc.toJson());
// 更新一个
// import static com.mongodb.client.model.Updates.*;
// col.updateOne(eq("i", 1), set("i", 110));
// 更新多个
// UpdateResult updateResult = col.updateMany(lt("i", 20), set("i", 10));
// System.out.println(updateResult.getModifiedCount());
// 删除一个
// col.deleteOne(eq("i", 10));
// 删除多个
// DeleteResult deleteResult = col.deleteMany(lte("_id", 10));
// System.out.println(deleteResult.getDeletedCount());
// 批量写入操作
// List<WriteModel<Document>> writes = new ArrayList<WriteModel<Document>>();
// writes.add(new InsertOneModel<Document>(new Document("_id", 11)));
// writes.add(new InsertOneModel<Document>(new Document("_id", 12)));
// writes.add(new InsertOneModel<Document>(new Document("_id", 13)));
// writes.add(new UpdateOneModel<Document>(new Document("_id", 1), new Document("$set", new Document("x", 2))));
// writes.add(new DeleteOneModel<Document>(new Document("_id", 1)));
// writes.add(new ReplaceOneModel<Document>(new Document("_id", 3), new Document("_id", 3).append("x", 4)));
// col.bulkWrite(writes);
// col.drop();
////
// col.bulkWrite(writes, new BulkWriteOptions().ordered(false));
// collection.find().forEach(printBlock);
// 删除数据库
// db.drop();
// GridFSBucket gridFSBucket = GridFSBuckets.create(db);
// File file = new File("D:/test.txt");
// if(!file.exists()) file.createNewFile();
// InputStream upload = new FileInputStream(file);
// ObjectId fileId = gridFSBucket.uploadFromStream("test.txt", upload);
// System.out.println("上传成功 fileID:" + fileId);
// 查看上传的文件列表
// gridFSBucket.find().forEach(new Block<GridFSFile>() {
// @Override
// public void apply(final GridFSFile gridFSFile) {
// System.out.println(gridFSFile.getFilename());
// }
// });
// 下载一个文件通过FileId
// FileOutputStream streamToDownloadTo = new FileOutputStream("d:/test3.txt");
// gridFSBucket.downloadToStream(new ObjectId("5833efd56d660635003ee6ac"), streamToDownloadTo);
// streamToDownloadTo.close();
// 通过文件名下载一个文件
// streamToDownloadTo = new FileOutputStream("/tmp/test.txt");
// GridFSDownloadByNameOptions downloadOptions = new GridFSDownloadByNameOptions().revision(0);
// gridFSBucket.downloadToStreamByName("test.txt", streamToDownloadTo, downloadOptions);
// streamToDownloadTo.close();
// 根据FileId重命名和删除文件
// gridFSBucket.rename(new ObjectId("5833efd56d660635003ee6ac"), "test1.txt");
// gridFSBucket.delete(new ObjectId("5833efd56d660635003ee6ac"));
}
// 插入
private static void insertM(MongoDatabase db) {
MongoCollection<Document> col = db.getCollection("foo1");
// 单个插入
Document doc = new Document("name", "MongoDB").append("type", "database");
col.insertOne(doc);
// 可以把JSON 字符串直接解析成Document
doc = Document.parse("{'name':'Java', 'type':'language'}");
col.insertOne(doc);
// 插入多个文档
List<Document> documents = new ArrayList<Document>();
for(int i=0; i<10; i++){
documents.add(new Document("i", i));
}
col.insertMany(documents);
}
}