如何在MongoDB中实现这一点?

时间:2013-02-17 06:47:33

标签: c# mongodb mongodb-.net-driver

我将我的SQL Server数据库迁移到MongoDB。现在我遇到了问题。

select * from AgentStatus a,
(select Max(TimeStamp) as TimeStamp,ExtNo
from AgentStatus
group by Extno) b
where a.[TimeStamp] = b.[TimeStamp] and b.ExtNo = a.ExtNo

如果我们使用RMDB,它很简单,但如何在MongoDB中执行这样的查询?或者我必须更改我的架构如何

有任何帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架。 假设你有一堆条目:

  

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
}