UNSTABLE CODE - USE AT YOUR OWN RISK
Async version of the MongoDB official driver. Async LINQ support (ToListAsync, FirstOrDefaultAsync, etc.) based on EF6.1 implementation.
###Nuget: MongoDB.Async
###Sample:
private async Task RunAsync()
{
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("MongoTest");
var collection = database.GetCollection<ApplicationConfiguration>("ApplicationConfigurations");
var cursor = collection.FindAll();
var count = await cursor.CountAsync();
var enumerator = await cursor.GetEnumeratorAsync();
while (await enumerator.MoveNextAsync())
{
var item = enumerator.Current;
}
var queryable = await collection
.AsQueryable()
.Where(a => a.ApplicationName.StartsWith("Test"))
.Skip(2)
.Take(5)
.ToListAsync();
var applicationConfiguration = new ApplicationConfiguration()
{
ApplicationConfigurationId = Guid.NewGuid(),
ApplicationName = "Test application",
SeverityLevel = System.Diagnostics.TraceEventType.Verbose,
SeverityFilterCollection = new List<SeverityFilter>()
{
new SeverityFilter()
{
SeverityFilterId = Guid.NewGuid(),
CategoryName = "Category",
MachineName = "SERVER1",
SeverityLevel = System.Diagnostics.TraceEventType.Error,
MessageTitle = "Title 1"
},
new SeverityFilter()
{
SeverityFilterId = Guid.NewGuid(),
CategoryName = "Category",
MachineName = "SERVER2",
SeverityLevel = System.Diagnostics.TraceEventType.Error,
MessageTitle = "Title 2"
}
}
};
var insertResult = await collection.InsertAsync(applicationConfiguration);
var updatedApplicationCofiguration = await collection.FindOneByIdAsAsync<ApplicationConfiguration>(applicationConfiguration.ApplicationConfigurationId);
updatedApplicationCofiguration.ApplicationName = "Test application Updated";
var updateResult = await collection.SaveAsync(updatedApplicationCofiguration);
}
Profiling:
/* cursor.CountAsync() */
{
"op" : "command",
"ns" : "MongoTest.$cmd",
"command" : {
"count" : "ApplicationConfigurations"
},
"ntoreturn" : 1,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(21),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(4),
"w" : NumberLong(2)
}
},
"responseLength" : 48,
"millis" : 0,
"ts" : ISODate("2014-03-20T16:43:25.889Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
/* cursor.GetEnumeratorAsync() */
{
"op" : "query",
"ns" : "MongoTest.ApplicationConfigurations",
"query" : { },
"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 26,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(28979),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(8),
"w" : NumberLong(3)
}
},
"nreturned" : 26,
"responseLength" : 327738,
"millis" : 29,
"ts" : ISODate("2014-03-20T16:43:25.935Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
/* collection.AsQueryable().Where(a => a.ApplicationName.StartsWith("Test")).Skip(2).Take(5).ToListAsync() */
{
"op" : "query",
"ns" : "MongoTest.ApplicationConfigurations",
"query" : {
"ApplicationName" : /^Test/s
},
"ntoreturn" : 5,
"ntoskip" : 2,
"nscanned" : 26,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(167),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(4),
"w" : NumberLong(10)
}
},
"nreturned" : 1,
"responseLength" : 530,
"millis" : 0,
"ts" : ISODate("2014-03-20T16:43:26.043Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
/* collection.InsertAsync(applicationConfiguration) */
{
"op" : "insert",
"ns" : "MongoTest.ApplicationConfigurations",
"ninserted" : 1,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(158)
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(7)
}
},
"millis" : 0,
"ts" : ISODate("2014-03-20T16:43:26.08Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
/* collection.FindOneByIdAsAsync<ApplicationConfiguration>(applicationConfiguration.ApplicationConfigurationId) */
{
"op" : "query",
"ns" : "MongoTest.ApplicationConfigurations",
"query" : {
"_id" : new BinData(3, "yo+dw6UsHk+5/K9a+MKysQ==")
},
"ntoreturn" : 1,
"ntoskip" : 0,
"nscanned" : 1,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(174),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(3),
"w" : NumberLong(3)
}
},
"nreturned" : 1,
"responseLength" : 514,
"millis" : 0,
"ts" : ISODate("2014-03-20T16:43:26.098Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
/* collection.SaveAsync(updatedApplicationCofiguration) */
{
"op" : "update",
"ns" : "MongoTest.ApplicationConfigurations",
"query" : {
"_id" : new BinData(3, "yo+dw6UsHk+5/K9a+MKysQ==")
},
"updateobj" : {
"_id" : new BinData(3, "yo+dw6UsHk+5/K9a+MKysQ=="),
"ApplicationName" : "Test application Updated",
"LogRepositoryName" : "Test application UpdatedLogs",
"SeverityLevel" : 16,
"SeverityLevelFlat" : 16,
"SeverityFilterCollection" : [{
"_id" : new BinData(3, "ZBf34q6j+UCNug1a0793Kg=="),
"CategoryName" : "Category",
"MachineName" : "SERVER1",
"MessageTitle" : "Title 1",
"SeverityLevel" : 2,
"SeverityLevelFlat" : 2
}, {
"_id" : new BinData(3, "H56TdPCeS0amsPkNmbDsOw=="),
"CategoryName" : "Category",
"MachineName" : "SERVER2",
"MessageTitle" : "Title 2",
"SeverityLevel" : 2,
"SeverityLevelFlat" : 2
}]
},
"nscanned" : 1,
"moved" : true,
"nmoved" : 1,
"nupdated" : 1,
"keyUpdates" : 0,
"numYield" : 0,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(187)
},
"timeAcquiringMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(6)
}
},
"millis" : 0,
"ts" : ISODate("2014-03-20T16:43:26.118Z"),
"client" : "127.0.0.1",
"allUsers" : [],
"user" : ""
}
documentation: http://www.mongodb.org/display/DOCS/CSharp+Language+Center apidoc: http://api.mongodb.org/csharp/
source code: http://github.com/mongodb/mongo-csharp-driver
mongodb home: http://www.mongodb.org/
- mailing list: http://groups.google.com/group/mongodb-user
- jira: http://jira.mongodb.org/
http://jira.mongodb.org/browse/CSHARP
- Robert Stam [email protected]
- Craig Wilson [email protected]
- Bit Diffusion Limited [email protected]
- Alex Brown https://github.com/alexjamesbrown
- Justin Dearing [email protected]
- Dan DeBilt [email protected]
- Teun Duynstee [email protected]
- Einar Egilsson https://github.com/einaregilsson
- Ken Egozi [email protected]
- Daniel Goldman [email protected]
- Simon Green [email protected]
- Nik Kolev [email protected]
- Oleg Kosmakov [email protected]
- Brian Knight [email protected]
- Richard Kreuter [email protected]
- Kevin Lewis [email protected]
- Dow Liu [email protected]
- Alex Lyman [email protected]
- Alexander Nagy [email protected]
- Sridhar Nanjundeswaran https://github.com/sridharn
- Andrew Rondeau [email protected]
- Ed Rooth [email protected]
- Pete Smith [email protected]
- staywellandy https://github.com/staywellandy
- Testo [email protected]
If you have contributed and we have neglected to add you to this list please contact one of the maintainers to be added to the list (with apologies).