Mongo DB
repository for CRUD
1. Install Mongo DB driver for C#
from nugget.
2. Define a Customer model
using
MongoDB.Bson.Serialization.Attributes;
public class Customer
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public DateTime LastModified { get; set; }
}
|
3. interface
public interface ICustomerRepository
{
IEnumerable<Customer> GetAll();
Customer Get(string id);
Customer Add(Customer item);
bool Delete(string id);
bool Update(string id, Customer item);
}
|
4. implement the CRUD methods in CustomerRepository : ICustomerRepository
■
Constructor and private object :
Note that the official Mongo suggest to use MongoClient to build the connection , instead of using
MongoServer _server = MongoServer.Create(…);
Note that the official Mongo suggest to use MongoClient to build the connection , instead of using
MongoServer _server = MongoServer.Create(…);
Private MongoServer _server = null;
private MongoDatabase _database = null;
private MongoCollection _customers = null;
public
CustomerRepository(string connection)
{
if (string.IsNullOrEmpty(connection))
{
connection = "mongodb://localhost:27017"; //Mongo's default
port is 27017
}
MongoClient client = new MongoClient(connection);
this._server = client.GetServer();
this._database = _server.GetDatabase("Customers");
this._customers =
_database.GetCollection<Customer>("Customers");
this._server.Connect();
}
|
■ Get all documents from "Customers" collection :
public IEnumerable<Customer> GetAll()
{
return _Customers.FindAllAs<Customer>();
}
|
■ Get a document with certain id
public Customer Get(string id)
{
IMongoQuery query = MongoDB.Driver.Builders.Query<Customer>.EQ(e
=>e.Id, id);
return this._customers.FindAs<Customer>(query).FirstOrDefault();
}
|
■ Insert a document
public Customer Add(Customer item)
{
item.Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString();
item.LastModified = DateTime.Now;
this._customers.Insert(item);
return item;
}
|
■ Delete a document with id
public bool Delete(string id)
{
IMongoQuery query = MongoDB.Driver.Builders.Query<Customer>.EQ(e =>
e.Id, id);
var result = _customers.Remove(query);
return result.DocumentsAffected == 1;
}
|
■ Update a document
public bool Update(string id, Customer item)
{
IMongoQuery query = MongoDB.Driver.Builders.Query<Customer>.EQ(e =>
e.Id, id);
item.LastModified = DateTime.UtcNow;
IMongoUpdate update =
MongoDB.Driver.Builders.Update
.Set("Email", item.Email)
.Set("LastModified", DateTime.Now)
.Set("Name", item.Name)
.Set("Phone", item.Phone);
var result = _customers.Update(query,
update);
return result.UpdatedExisting;
}
|
5. AP layer (Web API)
Just use the methods in Web API.
Just use the methods in Web API.
6. Test with Fiddler
Delete
Note that you can use OData in Web API with Mongo as well.
ex. http://localhost:6691/api/customer?$orderby=Phone
7. Reference
沒有留言:
張貼留言