Skip to content

Instantly share code, notes, and snippets.

Created December 28, 2012 03:00
Show Gist options
  • Save anonymous/4394097 to your computer and use it in GitHub Desktop.
Save anonymous/4394097 to your computer and use it in GitHub Desktop.
Simple MongoDB Repository in F#
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