C# 如何在MongoDB中实现这一点?

C# 如何在MongoDB中实现这一点?,c#,mongodb,mongodb-.net-driver,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中执行这样的查询?或者我必须更改我的模式?

我将我的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中执行这样的查询?或者我必须更改我的模式?以及如何执行


有什么帮助吗?谢谢

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

db.a.find

然后,您只需分组并最大化:

> 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
}

我尝试了两个单独的查询。在执行内部查询之后,我用where子句a.[TimeStamp]=b.[TimeStamp]和b.ExtNo=a.ExtNo迭代结果来查询整个集合。但是集合有200万个文档,尽管我添加了索引,速度还是很慢。你创建了什么索引?为什么迁移到MongoDB?@wiredPairie唯一索引,每个索引对应时间戳和ExtNo。原始查询要复杂得多,这是一个简化版,我的经理担心它的执行时间。所以我们希望使用文档数据库来获得更好的性能。我的英语很差,希望您能理解我的意思:您确定MongoDB使用了您创建的索引吗?你确定原来的查询不是问题吗?你说它更复杂,你测试过这个案例吗?也许是你的C语法?您需要发布更多,因为这在当前状态下太过投机。这是的答案吗?但仍然感谢!:
> 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
}