您的位置:首页 > 数据库 > Mongodb

MongoDB 学习笔记四 C#调用MongoDB

2015-10-27 15:51 621 查看

驱动

下载

https://github.com/mongodb/mongo-csharp-driver/downloads

项目地址:

https://github.com/mongodb/mongo-csharp-driver

1.10 使用参考:

http://mongodb.github.io/mongo-csharp-driver/1.10/

1.10 API

http://api.mongodb.org/csharp/1.10/

官方推荐使用Nuget进行安装。但我搜索时出来东西太多了,分不清,故直接下载。

要注意的是,2.0 和1.10支持的环境不同。

C#/.NET Driver VersionMongoDB 2.4MongoDB 2.6MongoDB 3.0
Version 2.0
Version 1.10
Driver Version.NET 3.5.NET 4.0.NET 4.5Mono 2.10Mono 3.x
Version 2.0
Version 1.10
我这里下载1.10版本,framework 4.0环境。

使用

连接

using MongoDB.Bson;
using MongoDB.Driver;
var client = new MongoClient("mongodb://localhost:27017");
var server = client.GetServer();
var database = server.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));

var list = await collection.Find(new BsonDocument("Name", "Jack"))
.ToListAsync();

foreach(var document in list)
{
Console.WriteLine(document["Name"]);
}


Document是实体类

using MongoDB.Bson;
using MongoDB.Driver;
public class Person
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
var client = new MongoClient("mongodb://localhost:27017");
var server = client.GetServer();
var database = server.GetDatabase("foo");
var collection = database.GetCollection<Person>("bar");

await collection.InsertOneAsync(new Person { Name = "Jack" });

var list = await collection.Find(x => x.Name == "Jack")
.ToListAsync();

foreach(var person in list)
{
Console.WriteLine(person.Name);
}


实体类给下面的代码使用

public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}


插入

var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; // Insert will set the Id if necessary (as it was in this example)


查找

var query = Query<Entity>.EQ(e => e.Id, id);
var entity = collection.FindOne(query);
// var entity = collection.FindOneByIdAs<Entity>(id);

/*
定义一个查询:查询stdid=1的文档
FindOneArgs args = new FindOneArgs {
Query = Query.EQ("stdid", 1),//查询stdid field等于1的document。
};
//查询
var std = collection.FindOneAs<Student>(args);
*/
/*
查询多条
IMongoQuery query = Query.GTE("stdid",2);
var result=collection.FindAs<Student>(Query.GTE("stdid",2));
foreach (var each in result) {
Console.WriteLine(each.stdName);
}
*/


保存

entity.Name = "Dick";
collection.Save(entity);


更新

var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry"); // update modifiers
collection.Update(query, update);


删除

var query = Query<Entity>.EQ(e => e.Id, id);
collection.Remove(query);


这是一个完整的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;

namespace ConsoleApplication1
{
public class Entity { public ObjectId Id { get; set; } public string Name { get; set; } }

class Program
{
static void Main(string[] args)
{
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Entity>("entities");

var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id;

var query = Query<Entity>.EQ(e => e.Id, id);
entity = collection.FindOne(query);

entity.Name = "Dick"; collection.Save(entity);

var update = Update<Entity>.Set(e => e.Name, "Harry");
collection.Update(query, update);

collection.Remove(query);
}
}
}


参考:http://mongodb.github.io/mongo-csharp-driver/1.10/getting_started/

LinQ查询

C# driver 1.8版本开始支持Linq查询。

var linquery = from e in collection.AsQueryable<SY.Model.User>()
//where e.age> 22
select e;
linquery=linquery.Where(c=>c.Name=="张三");
int count=linquery.Count();


参考:http://mongodb.github.io/mongo-csharp-driver/1.10/linq/

Document查询方式

未测试,参考地址记录在这里。

//Document docName = new Document { { "字段名1", "输入值1" }, { "字段名2", "输入值2" } };
/// <summary>
/// 根据姓名获取用户信息
/// </summary>
/// <param name="mUserInfo">用户Model类</param>
/// <returns>用户泛型集合</returns>
public List<UserInfo> GetUserByName(UserInfo mUserInfo)
{
List<UserInfo> lsUser = new List<UserInfo>();
using (Mongo mongo = new Mongo("mongodb://localhost"))
{
MongoDatabase mongoDatabase = mongo.GetDatabase("UserInfo") as MongoDatabase;
MongoCollection<Document> mongoCollection = mongoDatabase.GetCollection<Document>("myCollection") as MongoCollection<Document>;
mongo.Connect();
Document docName = new Document { { "FirstName", "aaa" }, { "LastName", "bbb" } };
MongoDB.ICursor<Document> users = mongoCollection.Find(docName);

foreach (Document user in users.Documents)
{
UserInfo mUser = new UserInfo();
mUser.FirstName = user["FirstName"].ToString();
mUser.LastName = user["LastName"].ToString();
mUser.CorporationName = user["CorporationName"].ToString();
mUser.Phone = user["Phone"].ToString();
mUser.Email = user["Email"].ToString();
mUser.UserType = user["UserType"].ToString();
lsUser.Add(mUser);
}
}

return lsUser;
}


http://weishangxue.blog.163.com/blog/static/21575188201181633811102/

http://mikaelkoskinen.net/post/mongodb-aggregation-framework-examples-in-c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: