我将我的 SQL Server 数据库迁移到了 MongoDB。现在我遇到了一个问题。
从AgentStatus a 中选择 * , (选择 Max(TimeStamp) 作为 TimeStamp,ExtNo 从代理状态 按 Extno 分组)b 其中 a.[TimeStamp] = b.[TimeStamp] 和 b.ExtNo = a.ExtNo
如果我们使用 RMDB,这很简单,但是如何在 MongoDB 中执行这样的查询?或者我必须更改我的架构?如何?
有什么帮助吗?谢谢!
我将我的 SQL Server 数据库迁移到了 MongoDB。现在我遇到了一个问题。
从AgentStatus a 中选择 * , (选择 Max(TimeStamp) 作为 TimeStamp,ExtNo 从代理状态 按 Extno 分组)b 其中 a.[TimeStamp] = b.[TimeStamp] 和 b.ExtNo = a.ExtNo
如果我们使用 RMDB,这很简单,但是如何在 MongoDB 中执行这样的查询?或者我必须更改我的架构?如何?
有什么帮助吗?谢谢!
您可以使用聚合框架。假设您有一堆条目:
db.a.find();
{ "_id" : 1, "n" : 1, "d" : ISODate("2012-01-01T00:00:00Z") }
{ "_id" : 2, "n" : 1, "d" : ISODate("2012-01-12T00:00:00Z") }
{ "_id" : 3, "n" : 1, "d" : ISODate("2012-02-04T00:00:00Z") }
{ "_id" : 4, "n" : 2, "d" : ISODate("2012-01-22T00:00:00Z") }
{ "_id" : 5, "n" : 3, "d" : ISODate("2012-01-07T00:00:00Z") }
{ "_id" : 6, "n" : 2, "d" : ISODate("2011-12-31T00:00:00Z") }
然后,您只需分组和最大值:
> db.a.aggregate({$group:{_id:"$n",latest:{$max:"$d"}}})
这为您提供了每个 n 的记录以及该条目的最新时间戳:
> db.a.aggregate({$group:{_id:"$n",latest:{$max:"$d"}}})
{
"result" : [
{
"_id" : 3,
"latest" : ISODate("2012-01-07T00:00:00Z")
},
{
"_id" : 2,
"latest" : ISODate("2012-01-22T00:00:00Z")
},
{
"_id" : 1,
"latest" : ISODate("2012-02-04T00:00:00Z")
}
],
"ok" : 1
}