use*_*853 -3 mongodb mongodb-.net-driver
我使用MongoDB c#查询编写了Sorting的查询和DateTime的MAX和MIN记录.我写道
var server = MongoServer.Create(this.connectionString);
var db = server.GetDatabase(DATABASE);
var tblRskAlerts = db.GetCollection(RISKALERT_TBL);
var query = Query.And(Query.EQ("Entry", null));
var sort = tblRskAlerts.Find(query).SetSortOrder(SortBy.Ascending("Entry"));
var sort =SortBy.Ascending("Entry");
var fromDt = sort.Max(x => x["Entry"].ToJson());
var toDt = sort.Min(x => x["Entry"].ToJson());
txtToCal.Text = ((DateTime)toDt).ToLocalTime();
Run Code Online (Sandbox Code Playgroud)
现在我想要显示fromDt,toDt into Textboxes.但我得到错误,因为无法将String转换为DateTime.
我猜你的问题可以改写如下:
通常最好先在MongoDB shell中解决问题,然后在完成实验后转换为C#.
以下shell语句创建一些示例数据:
> db.test.remove()
> db.test.insert({})
> db.test.insert({Entry:ISODate("2011-12-01")})
> db.test.insert({Entry:ISODate("2011-12-02")})
> db.test.insert({Entry:ISODate("2011-12-03")})
Run Code Online (Sandbox Code Playgroud)
这就是刚插入的文档的样子:
> db.test.find()
{ "_id" : ObjectId("4efa1208a981bdd43ddcacd0") }
{ "_id" : ObjectId("4efa1215a981bdd43ddcacd1"), "Entry" : ISODate("2011-12-01T00:00:00Z") }
{ "_id" : ObjectId("4efa1218a981bdd43ddcacd2"), "Entry" : ISODate("2011-12-02T00:00:00Z") }
{ "_id" : ObjectId("4efa121ba981bdd43ddcacd3"), "Entry" : ISODate("2011-12-03T00:00:00Z") }
Run Code Online (Sandbox Code Playgroud)
请注意,其中一个没有Entry字段.我们可以使用$ exists查询将其从结果中排除:
> db.test.find({Entry:{$exists:true}})
{ "_id" : ObjectId("4efa1215a981bdd43ddcacd1"), "Entry" : ISODate("2011-12-01T00:00:00Z") }
{ "_id" : ObjectId("4efa1218a981bdd43ddcacd2"), "Entry" : ISODate("2011-12-02T00:00:00Z") }
{ "_id" : ObjectId("4efa121ba981bdd43ddcacd3"), "Entry" : ISODate("2011-12-03T00:00:00Z") }
Run Code Online (Sandbox Code Playgroud)
现在要查找包含最小值和最大值的文档,我们可以对其进行两次排序,一次升序,一次降序,并将结果限制为一个文档:
> db.test.find({Entry:{$exists:true}}).sort({Entry:1}).limit(1)
{ "_id" : ObjectId("4efa1215a981bdd43ddcacd1"), "Entry" : ISODate("2011-12-01T00:00:00Z") }
> db.test.find({Entry:{$exists:true}}).sort({Entry:-1}).limit(1)
{ "_id" : ObjectId("4efa121ba981bdd43ddcacd3"), "Entry" : ISODate("2011-12-03T00:00:00Z") }
Run Code Online (Sandbox Code Playgroud)
然后,只需从文档中提取Entry值即可.
这是C#代码中的样子:
var server = MongoServer.Create("mongodb://localhost/?safe=true");
var database = server["test"];
var collection = database["test"];
collection.Drop();
collection.Insert(new BsonDocument());
collection.Insert(new BsonDocument("Entry", new DateTime(2011, 12, 1, 0, 0, 0, DateTimeKind.Utc)));
collection.Insert(new BsonDocument("Entry", new DateTime(2011, 12, 2, 0, 0, 0, DateTimeKind.Utc)));
collection.Insert(new BsonDocument("Entry", new DateTime(2011, 12, 3, 0, 0, 0, DateTimeKind.Utc)));
var query = Query.Exists("Entry", true);
var sortAscending = SortBy.Ascending("Entry");
var sortDescending = SortBy.Descending("Entry");
foreach (var document in collection.Find(query).SetSortOrder(sortAscending))
{
Console.WriteLine(document.ToJson());
}
Console.WriteLine();
var minDocument = collection.Find(query).SetSortOrder(sortAscending).SetLimit(1).First();
var maxDocument = collection.Find(query).SetSortOrder(sortDescending).SetLimit(1).First();
var minDateTime = minDocument["Entry"].AsDateTime;
var maxDateTime = maxDocument["Entry"].AsDateTime;
Console.WriteLine("Min Entry = {0}", minDateTime.ToString("o"));
Console.WriteLine("Max Entry = {0}", maxDateTime.ToString("o"));
Run Code Online (Sandbox Code Playgroud)
完整的测试计划位于:http://www.pastie.org/3080660
| 归档时间: |
|
| 查看次数: |
5599 次 |
| 最近记录: |