0

SQL Server データベースを MongoDB に移行しましたが、問題が発生しました。

select * from AgentStatus a,
(TimeStamp,ExtNo として Max(TimeStamp) を選択します。AgentStatus
から
Extno でグループ化) b
a.[TimeStamp] = b.[TimeStamp] および b.ExtNo = a.ExtNo

RMDB を使用する場合は簡単ですが、MongoDB でこのようなクエリを実行するにはどうすればよいですか?それともスキーマを変更する必要がありますか?そしてどのように?

何か助けて?ありがとう!

4

1 に答える 1

0

集計フレームワークを使用できます。たくさんのエントリがあるとします:

デシベル.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
}
于 2013-02-17T20:13:17.717 に答える