使用php将mysql查询转换为mongodb

目前我有一个像这样的mysql表:</ p>

  +  --------- + ---------- + ------ + ------ + --------- + ------  ---------- + \ N | 领域| 输入| 空| 钥匙| 默认| 额外| 

  • --------- + ---------- + ------ + ----- + --------- + - -------------- + \ N | id | int(11)| 没有| PRI | NULL | auto_increment |
    | mediaID | int(11)| 没有| | NULL | |
    | 日期| datetime | 没有| | NULL | | \ N + --------- + ---------- + ------ + ------ + --------- + --- ------------- +
    </ code> </ pre>

    在此表中,我存储了针对特定媒体所做的每一次点击。 发生此命中时,我保存了mediaID和日期。 所以...当我想要显示趋势媒体(大多数查看媒体的特定时间段)时,我使用这个mysql查询:</ p>

      SELECT mediaID,COUNT(*)as cnt  FROM命中WHERE DATE(日期)= CURDATE() -  INTERVAL 1 DAY GROUP BY mediaID ORDER BY cnt DESC LIMIT 0,10 
    </ code> </ pre>

    现在..我正在筹划 在MongoDB中移动它。 目前我收集了“点击”以及以下文件:</ p>

      {
    _id:ObjectId(“50827eaaae1c3ced6c00000f”),
    mediaID:“2”,
    ts: ISODate(“2012-10-20T13:36:26 + 03:00”)
    }
    {
    _id:ObjectId(“50827ebeae1c3ced6c000010”),
    mediaID:“1”,
    ts:ISODate(“ 2012-10-20T13:36:46 + 03:00“)
    }
    {
    _id:ObjectId(”50827ec3ae1c3c6167000008“),
    mediaID:”2“,
    ts:ISODate(”2012-10“ -20T13:36:51 + 03:00“)
    }
    </ code> </ pre>

    所以,我的问题是如何转换我以前的查询以便能够使用MongoDB ?

    P.S。 我正在使用PHP与php mongodb驱动程序。</ p>

    问候,
    Milen </ p>
    </ div>

展开原文

原文

Currently I have an mysql table like this:

+---------+----------+------+-----+---------+----------------+
| Field   | Type     | Null | Key | Default | Extra          |
+---------+----------+------+-----+---------+----------------+
| id      | int(11)  | NO   | PRI | NULL    | auto_increment |
| mediaID | int(11)  | NO   |     | NULL    |                |
| date    | datetime | NO   |     | NULL    |                |
+---------+----------+------+-----+---------+----------------+

In this table I store every hit made for a specific media. I save mediaID and date when this hit happened. So ... when I want to show trending medias (most viewed medias for specific time period), I use this mysql query:

SELECT  mediaID, COUNT(*) as cnt FROM hits WHERE DATE(date) = CURDATE() - INTERVAL 1 DAY GROUP BY mediaID ORDER BY cnt DESC LIMIT 0,10

Now.. I'm planning to move this in MongoDB. Currently I have collection "hits" with the following documents:

{
    _id: ObjectId("50827eaaae1c3ced6c00000f"),
    mediaID: "2",
    ts: ISODate("2012-10-20T13:36:26+03:00")
}
{
    _id: ObjectId("50827ebeae1c3ced6c000010"),
    mediaID: "1",
    ts: ISODate("2012-10-20T13:36:46+03:00")
}
{
    _id: ObjectId("50827ec3ae1c3c6167000008"),
    mediaID: "2",
    ts: ISODate("2012-10-20T13:36:51+03:00")
}

So, my question is how to convert my previous query to be able to work with MongoDB? P.S. I'm using php with php mongodb driver.

Greetings, Milen

2个回答



使用汇总框架。 你想只计算过去24小时的点击数,按照mediaID对它们进行分组,然后从最高到最低排序并显示前10位,对吗?</ p>

在shell中:</ p>

  today = new Date(); 
//这可以让你昨天,但你可以将它更改为任何时间段
cutoff = new Date(today.getYear(),today.getMonth() ,today.getDate() - 1);
db.hits.aggregate([
{$ match:{ts:{$ gt:cutoff}}},
{$ group:{_ id:“$ mediaID”, cnt:{$ sum:1}}},
{$ project:{mediaID:“$ _id”,cnt:1,_id:0}},
{$ sort:{cnt:-1}},\ n {$ limit:10}
])
</ code> </ pre>

您将收到您显示的样本数据:</ p>

 < 代码> {
“结果”:[
{
“mediaID”:“2”,
“cnt”:2
},
{
“mediaID”:“1”,
“ cnt“:1
}
],
”ok“:1
}
</ code> </ pre>
</ div>

展开原文

原文

Use the Aggregation Framework. You want to only count hits from the last 24 hours, group them by mediaID and then order highest to lowest and show top ten, right?

In the shell:

today = new Date();
// this gets you yesterday but you can change this to be any time period
cutoff = new Date(today.getYear(), today.getMonth(), today.getDate()-1);
db.hits.aggregate( [
   {$match: {ts: {$gt: cutoff} } },
   {$group: {_id: "$mediaID", cnt: {$sum: 1} } },
   {$project: {mediaID: "$_id", cnt:1, _id:0 } },
   {$sort: { cnt:-1 } },
   {$limit: 10}
] )

You will get back for sample data you showed:

{
    "result" : [
        {
            "mediaID" : "2",
            "cnt" : 2
        },
        {
            "mediaID" : "1",
            "cnt" : 1
        }
    ],
    "ok" : 1
}

dongqiang1226
dongqiang1226 没关系。 我能够将其转换为php。 非常感谢@ asya-kamsky
大约 8 年之前 回复
douye2488
douye2488 谢谢@Asya Kamsky,但我怎么能把它转换成PHP?
大约 8 年之前 回复



只是另一个建议。</ p>

因为你使用 int </ code>和< 代码> mediaID </ code>,但是mongodb中的 mediaID </ code>的数据是使用 string </ code>,你应该使用 intval()</ code>来转换 将数据存储到 mediaID </ code>之前的数据。</ p>

如果使用 string </ code>而不是,则存在一些问题(例如:比较) int </ code>。
是否可以投射 MongoDB-Query? </ p>
</ div>

展开原文

原文

Just another advice.

Because you use int with mediaID, but the data with your mediaID in mongodb is using string, you should use intval() to convert the data before storing it into mediaID.

There are some issues(ex: comparison) if you use string instead of int. Is it possible to cast in a MongoDB-Query?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐