5 people like it.
Like the snippet!
Idiomatic F# wrapper for storing and reading from MonoDB
Basic wrapper for storing and reading documents from MongoDB with the official .NET driver.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
|
open MongoDB.Bson
open MongoDB.Bson.IO
open MongoDB.Driver
/// <summary>
/// Contains functions for communicating with MongoDB.
/// </summary>
module Mongo =
/// <summary>
/// Stores a document in the MongoDB target.
/// </summary>
let store (connection : string) database collection document =
let client = new MongoClient(connection)
let db = database |> client.GetDatabase
let collection = collection |> db.GetCollection
let document = document |> BsonDocument.Parse
document |> collection.InsertOne
let settings = JsonWriterSettings()
settings.OutputMode <- JsonOutputMode.Strict
let document = document.ToJson(settings)
document
/// <summary>
/// Reads a document or documents from the MongoDB target.
/// </summary>
let read (connection : string) database collection (filter : string option) =
let client = new MongoClient(connection)
let db = database |> client.GetDatabase
let collection = collection |> db.GetCollection<BsonDocument>
let cursor : IAsyncCursor<BsonDocument> =
collection.FindSync(
filter
|> Option.map (BsonDocument.Parse >> FilterDefinition.op_Implicit)
|> Option.defaultValue FilterDefinition.Empty)
let settings = JsonWriterSettings()
settings.OutputMode <- JsonOutputMode.Strict
let rec readDoc docs =
if cursor.MoveNext() |> not then
docs
else
let batch = cursor.Current
batch
|> Seq.toArray
|> Array.map (fun d -> d.ToJson(settings))
|> Array.append docs
|> readDoc
readDoc [| |]
|
Multiple items
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
type 'T option = Option<'T>
Full name: Microsoft.FSharp.Core.option<_>
module Option
from Microsoft.FSharp.Core
val map : mapping:('T -> 'U) -> option:'T option -> 'U option
Full name: Microsoft.FSharp.Core.Option.map
val not : value:bool -> bool
Full name: Microsoft.FSharp.Core.Operators.not
module Seq
from Microsoft.FSharp.Collections
val toArray : source:seq<'T> -> 'T []
Full name: Microsoft.FSharp.Collections.Seq.toArray
module Array
from Microsoft.FSharp.Collections
val map : mapping:('T -> 'U) -> array:'T [] -> 'U []
Full name: Microsoft.FSharp.Collections.Array.map
val append : array1:'T [] -> array2:'T [] -> 'T []
Full name: Microsoft.FSharp.Collections.Array.append
More information