首先,使用的是官方提供的c#访问组件https://github.com/mongodb/mongo-csharp-driver 然后、编译后引用mongodb.bson.dll及mongodb.driver.dll,并在cs文件中声明引用using mongodb.bson;using mongodb.driver;using mongodb.driver.builders;第一个是针对bso
首先,使用的是官方提供的c#访问组件https://github.com/mongodb/mongo-csharp-driver
然后、编译后引用mongodb.bson.dll及mongodb.driver.dll,并在cs文件中声明引用using mongodb.bson;using mongodb.driver;using mongodb.driver.builders;第一个是针对bson格式的命名空间,第二个是主空间,第三个是用来构造查询和更新等条件的构造器命名空间
一、数据库连接 mongoclient client = null; mongoserver server = null; //connection string constr = mongodb://user:pw@127.0.0.1/db1; client = new mongoclient(constr); server = client.getserver(); server.connect();
注意连接串的写法,上面的写法是带用户认证的,关于连接串写法的更多信息可以参考http://docs.mongodb.org/ecosystem/tutorial/authenticate-with-csharp-driver/
二、获取数据库内的collection mongodatabase db = server.getdatabase(db1); mongocollection colaa = db.getcollection(col1);这里获取在db1数据库下,名为col1的collection,
这里获取的mongocollection支持泛型,可以按默认的bsondocument为一行的格式获取,也可以按自定义的类来获取,若按bsondocument为一行获取,代码如下(每个bsondocument对象为collection的一行): mongocursor doc = colaa.findallas(); foreach (bsondocument book in doc) {}
若按自定义的类为一行来获取,代码如下: mongocursor res = colaa.findallas(); foreach (row row1 in res){}这里要注意,如果按自定义类来获取,那么类需要预先定义好,且类中的变量名必须与数据库中一致,且列数也需要一致,若出现数据库中有某一列,但类中缺少这个对象时,会报错,下面是一个类定义的示例: public class row { public objectid _id; public string name; public string part; public string age; }上例中,findallas函数为全部查询,还有一些其它行查询及筛选方法,见http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#mongocollection-tdefaultdocument-class中的mongocollection部分三、读取collection中一行内的内容和上面对应的,有两种情况,如果是按自定义类来获取的数据行,那么直接访问类的成员变量即可
如果是按bsondocument获取的,那每一行数据对应一个bsondocument,一个bsondocument是由多个“name-value对构成的,其中name为string格式,value为bsonvalue类型,该值可以直接使用book[name]的格式进行访问,关于bsonvalue的进一步详细说明,可以参考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#bsonvalue-and-subclasses中的bsonvalue部分
四:新建collection新建colletion很简单,代码示例如下,但注意,如果已经存在了指定名称的collection,则会抛出异常 //create collection mongodatabase db = server.getdatabase(db1); var res =db.createcollection(col2);
五:插入行同样分两种情况,插入方式基本相同,代码如下: //insert mongodatabase db = server.getdatabase(db1); mongocollection colaa = db.getcollection(col1); //使用bsondocument格式插入 bsondocument doc = new bsondocument { { name, sse2 }, { part, 44224 } }; colaa.insert(doc); //使用自定类插入 row r1 = new row { name = sse3, part = 554 }; colaa.insert(r1);
这里注意一下,如果自定义类里某一个变量没有赋值,在插入到数据库时,也会写一个null进去,而bsondocument则不会出现这个元素,比如上两个语句的运行结果:{ _id : objectid(5355d8dfccee160de4dca545), name : sse2, part : 44224 }{ _id : objectid(5355d93bccee16088491c420), name : sse3, part : 554, age : null }
还有一些的方法,例如批量写入等,可以参考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#insertbatch-method中的相应内容
六:更新行更新行时需要使用到构造器构造查询条件和更新语句,query为查询条件构造器,update为更新语句构造器,代码示例如下: //update mongodatabase db = server.getdatabase(db1); mongocollection colaa = db.getcollection(col1); var query = query.and( query.eq(name, sse3), query.eq(part, 554) ); var update = mongodb.driver.builders.update.set(age, 36); colaa.update(query, update);
其它还有一些更新的函数,比如更新和插入为一体的save等,可以参考http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#save-tdocument-method的相应内容
七:删除行删除行时也需要使用到query构造器构造查询条件,语句会将符合条件的行删除掉,代码示例如下: //remove mongodatabase db = server.getdatabase(db1); mongocollection colaa = db.getcollection(col1); var query = query.and( query.eq(name, sse3), query.eq(part, 554) ); var res = colaa.remove(query);