MongoDB是非关系型、文档型的数据库,方便之处在于可以直接存取class类型……官网定期会开设Free的课程,上一个项目中使用到MongoDB,现在我做的项目用的是EF,所以想将MongoDB用过的方法、注意的事项和一些想法总结一下,毕竟,如果再次使用的话林林总总去拼凑还是要浪费时间的。
(1) MongoDB.Bson.dll
(2) MongoDB.Driver.dll
很好的可视化软件,MongoVUE
//Mongo数据库名称
private MongoDatabase Mg_db;
//Mongo数据库集合名称
public MongoCollection Mg_col;
//MongoServer
private MongoServer mongoServer;
//连接字符串(以mongodb://开头)
string connectionString = "mongodb://localhost";//或者是192.xxx.xxx.xxx
//string constr = "mongodb://" + ip + ":" + port; //连接ip和该port
//连接Mongo数据库
var client = new MongoClient(connectionString);
//得到一个客户端引用
mongoServer = client.GetServer();
Mg_db = mongoServer.GetDatabase(dbName);
//dbName是新库的名字
//如果已有dbName这个库,那Mg_db是get这个库,否则就是创建
Mg_col = Mg_db.GetCollection<T>(connectionName);
//connectionName是新表的名字
//如果该库已有connectionName这个表,那Mg_col 是get这个表,否则就是创建
public void Insert<T>(string dbName, string connectionName, T t)
{
Mg_db = mongoServer.GetDatabase(dbName); //get 某个库
MongoCollection collection = Mg_db.GetCollection<T>(connectionName); //get该库某个表
collection.Insert(t); //插入(任意类型)
}
public void delete<T>(string dbName, string connectionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection<T>(connectionName);
var query = Query.EQ(key, value);
//查询条件,eg:我要删除name是张三的该条数据,key,字段名,value是张三
Mg_col.Remove(query);
}
public void UpData(string dbName, string connectionName, string key, BsonValue value, People t)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(connectionName);
var query = Query.EQ(key, value);
People temp = Mg_col.FindOneAs<People>(query);
//根据查询条件获取表中People类型的数据temp,这也是我们要更新的数据
t.id = (temp as People).id;
//t是People类型的一条新数据,它拿到要更新数据的id
Mg_col.Update(query, Update.Replace(t));
}
public T Find<T>(string dbName, string connectionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoCollection collection = Mg_db.GetCollection<T>(connectionName);
var query = Query.EQ(key, value);
T result = collection.FindOneAs<T>(query);
return result;
}
public long FindSameNameCollectionNum(string dbName, string collcetionName, string key, BsonValue value)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(collcetionName);
var query = Query.EQ(key, value);
long count = Mg_col.Count(query);
return count;
}
public List<T> GetProjectArray<T>(string dbName, string connectionName)
{
Mg_db = mongoServer.GetDatabase(dbName);
Mg_col = Mg_db.GetCollection(connectionName);
//获取该集合所有对象
var result = Mg_col.FindAllAs<T>();
List<T> pList = new List<T>();
pList.AddRange(result);
return pList;
}
MongoDB中每个库对应一个GridFS文件夹用来存放影音文本……
可以在这里用程序添加
可以直接在MongoVUE中添加
public void AddFileInGridFS(string dbName, string filePath)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
gridfs.Upload(filePath);
}
public void LoadFileInGridFS(string dbName, string fileName)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
gridfs.Download(fileName);
}
public byte[] ReadFileFromfs(string dbName, string fileName, byte[] bytes)
{
Mg_db = mongoServer.GetDatabase(dbName);
MongoGridFS gridfs = Mg_db.GridFS;
MongoGridFSStream gridFileStream = gridfs.OpenRead(fileName);
bytes = new byte[gridFileStream.Length];
gridFileStream.Read(bytes, 0, bytes.Length);
return bytes;
}
1.库名不可以是中文,会报错。
2.private的数据无法存入MongoDB中。
3.要存入的class,结构中添加using MongoDB.Bson;并添加 public ObjectId id { get; set; },这个id存入后自增长。
1.MongoDB的结构库—-集合—-对象,这里的集合就是表,但是我说的是”集合“,以至于上面的方法中我定义的都是collection,同样的,我强调的还有对象这个概念
2.一个表可以存多种类型的数据,但是最好不要这样,读取的时候很麻烦,拆箱装箱极易错,还是一个表一种类型为好。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/panpen120/article/details/48041937