Created
December 28, 2012 03:00
-
-
Save anonymous/4394097 to your computer and use it in GitHub Desktop.
Simple MongoDB Repository in F#
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open System.Linq | |
open FluentMongo.Linq | |
open MongoDB.Bson | |
open MongoDB.Driver | |
open MongoDB.Driver.Builders | |
module Repository = | |
let private connectionString = MongoUrl("ENTER YOUR CONNECTION STRING, ALL YOUR BASE ARE BELONG TO US") | |
let private server = MongoServer.Create(connectionString) | |
let private settings = MongoDatabaseSettings(server, "Beatz") | |
let private db = MongoDatabase(server, settings) | |
let collection<'a> = db.GetCollection<'a> typedefof<'a>.Name | |
let qry<'a> : IQueryable<'a> = | |
collection |> MongoCollectionExtensions.AsQueryable | |
let save item = | |
item |> collection.Save |> ignore | |
let inline remove<'a when 'a : (member Id : ObjectId)> item = | |
let id = (^a : (member Id : ObjectId) item) |> BsonValue.Create | |
Query.EQ ("_id", id) | |
|> collection<'a>.Remove | |
|> ignore | |
let removeAll<'a> () = | |
collection<'a>.RemoveAll () |> ignore | |
module RepositoryTest = | |
[<CLIMutable>] | |
type User = { Id : ObjectId; Name : string; Age : int; } | |
[<CLIMutable>] | |
type Place = { Id : ObjectId; Name : string; Address : string; } | |
let saveTest () = | |
{ Id = ObjectId.Empty; Name = "Diego Frata"; Age = 25 } |> Repository.save | |
{ Id = ObjectId.Empty; Name = "Mundo Cervejeiro"; Address = "Av. Miruna, 51" } |> Repository.save | |
let queryTest () = | |
query { for u in Repository.qry<User> do | |
select u } | |
|> Seq.iter (fun u -> printf "%A %s %d" u.Id u.Name u.Age) | |
let removeTest () = | |
query { for u in Repository.qry<User> do | |
select u | |
take 1 } | |
|> Seq.iter (fun u -> Repository.remove u) | |
let removeAllTest () = | |
Repository.removeAll<User> () | |
[<EntryPoint>] | |
let main argv = | |
do saveTest() | |
do queryTest() | |
do removeTest() | |
0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment