-
Notifications
You must be signed in to change notification settings - Fork 80
Examples
joelvh edited this page Oct 29, 2010
·
3 revisions
An example of using NoRM. This has been developed and tested using Mono 2.6.4 on Linux.
public class Product
{
public Product()
{
// Default values are to be set here
Shipping = new Address();
}
public ObjectId _id{get;set;}
public double Price{get;set;}
public Address Shipping{get;set;}
public DbReference<Brand> TheBrand{get;set;}
public string Name{get;set;}
public override string ToString ()
{
return string.Format ("[Product: Price={0}, Shipping={1}, Name={2}]", Price, Shipping, Name);
}
}
public class Brand
{
public Brand()
{
Suppliers = new List<Address>();
}
public ObjectId _id{get;set;}
public string Name{get;set;}
public int CustomerRating{get;set;}
public List<Address> Suppliers{get;set;}
public override string ToString ()
{
return string.Format ("[Brand: Name={0}, CustomerRating={1}", Name, CustomerRating);
}
}
public class Address
{
public Address()
{
}
public ObjectId _id{get;set;}
public string StreetName{get;set;}
public override string ToString ()
{
return string.Format ("[Address: _id={0}]", _id);
}
}
using(var db = Mongo.Create("mongodb://localhost/test"))
{
var prodCollection = db.GetCollection<Product>();
var brandCollection = db.GetCollection<Brand>();
// your code here.
}
// create four addresses
List<Address> places = new List<Address>();
for(int i = 0; i < 6; i++)
places.Add(new Address{StreetName=String.Format("#{0}, Street St", i)});
// create brands
Brand acme = new Brand{Name="Acme Inc.", CustomerRating = 8};
acme.Suppliers.Add(places[0]);
acme.Suppliers.Add(places[1]);
brandCollection.Save(acme);
//
Brand apple = new Brand{Name = "Apple, Inc.", CustomerRating = 7};
apple.Suppliers.Add( new Address{StreetName = "Infinite Loop"});
brandCollection.Save(apple);
// Create products
Product rocketBoots = new Product{Price = 100, Shipping = places[4], Name="Rocket Boots"};
rocketBoots.TheBrand = new DbReference<Brand>(acme._id);
prodCollection.Save(rocketBoots);
//
Product explosives = new Product{Price = 10, Shipping = places[2], Name = "Explosives"};
explosives.TheBrand = new DbReference<Brand>(acme._id);
//
Product iPod = new Product{Price=350, Shipping = places[5], Name = "iPod Mini"};
iPod.TheBrand = new DbReference<Brand>(apple._id);
prodCollection.Save(iPod);
using(var db = Mongo.Create("mongodb://localhost/test"))
{
var prod = db.GetCollection<Product>();
var brand = db.GetCollection<Brand>();
// iterate over the products
foreach(var product in prod.AsQueryable().ToList())
{
// Retrieve a brand from a database reference
Brand theBrand = product.TheBrand.Fetch(() => db);
//
Console.WriteLine ("Available: {0} {1}", product.ToString(), theBrand.ToString());
}
}
This is an article by Tadeusz Wojcik with many examples and operators, comparing the native MongoDB queries to NoRM using anonymous objects and LINQ: NoSql No Problem - NoRM and MongoDB Tutorial - Querying