Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongoDB、ajax、php仅显示新消息_Php_Jquery_Ajax_Mongodb - Fatal编程技术网

mongoDB、ajax、php仅显示新消息

mongoDB、ajax、php仅显示新消息,php,jquery,ajax,mongodb,Php,Jquery,Ajax,Mongodb,这可能是一个愚蠢的问题,但我认为它将对所有新的mongoDB用户有用,而不仅仅是我自己 我目前正在编写一个实时聊天脚本,以了解mongoDB。我只在聊天中加载新消息,而不是加载所有消息并替换旧消息时遇到问题。这就是我所拥有的 我的PHP: try { $m = new Mongo(); // connect $db = $m->selectDB("local"); } catch ( MongoConnectionException $e ) { echo '&

这可能是一个愚蠢的问题,但我认为它将对所有新的mongoDB用户有用,而不仅仅是我自己

我目前正在编写一个实时聊天脚本,以了解mongoDB。我只在聊天中加载新消息,而不是加载所有消息并替换旧消息时遇到问题。这就是我所拥有的

我的PHP:

try 
{
    $m = new Mongo(); // connect
    $db = $m->selectDB("local");
}
catch ( MongoConnectionException $e ) 
{
    echo '<p>Couldn\'t connect to mongodb, is the "mongo" process running?</p>';
    exit();
}
$collection = $db->selectCollection("message");
echo "".$collection." selected";
$cursor = $collection->find();
// iterate cursor to display title of documents
foreach ($cursor as $document) {
echo $document["sender"].": ". $document["message"] . "<br>";
我的邮件集:

"createdAt" => $now, 
"sender" => $sender, 
"message" => $message

我知道我的JS最终会开始使用.append(messages),但我真的不知道如何处理我的PHP。那么,如何更改php以只查找新消息(比上一组消息旧)

找到了答案。使用会话存储上次更新的时间。因此PHP代码如下所示:

$now = date("Y-m-d H:i:s");
$last = $_SESSION["last_message_ts"];
$session_last = new MongoDate(strtotime($last));
$session_now = new MongoDate(strtotime($now));
$_SESSION["last_message_ts"]=$now;

 try 
    {
        $m = new Mongo(); // connect
        $db = $m->selectDB("local");
    }
    catch ( MongoConnectionException $e ) 
    {
        echo '<p>Couldn\'t connect to mongodb, is the "mongo" process running?</p>';
        exit();
    }
    $collection = $db->selectCollection("message");
    $cursor = $collection->find(array("createdAt" => array('$gt' => $session_last, '$lte' => $session_now)));
    // iterate cursor to display title of documents
    foreach ($cursor as $document) {
    echo $document["sender"].": ". $document["message"];
}
$now=日期(“Y-m-d H:i:s”);
$last=$\会话[“最后一条消息”];
$session_last=新MongoDate(strotime($last));
$session_now=新的MongoDate(strotime($now));
$\u会话[“最后一条消息”]=$now;
尝试
{
$m=new Mongo();//连接
$db=$m->selectDB(“本地”);
}
捕获(MongoConnectionException$e)
{
echo'无法连接到mongodb,“mongo”进程正在运行吗?

; 退出(); } $collection=$db->selectCollection(“消息”); $cursor=$collection->find(数组(“createdAt”=>array(“$gt'=>$session\u last,$lte'=>$session\u now)); //迭代光标以显示文档的标题 foreach($cursor作为$document){ echo$document[“发件人”]。“:”$document[“消息”]; }
找到了答案。使用会话存储上次更新的时间。因此PHP代码如下所示:

$now = date("Y-m-d H:i:s");
$last = $_SESSION["last_message_ts"];
$session_last = new MongoDate(strtotime($last));
$session_now = new MongoDate(strtotime($now));
$_SESSION["last_message_ts"]=$now;

 try 
    {
        $m = new Mongo(); // connect
        $db = $m->selectDB("local");
    }
    catch ( MongoConnectionException $e ) 
    {
        echo '<p>Couldn\'t connect to mongodb, is the "mongo" process running?</p>';
        exit();
    }
    $collection = $db->selectCollection("message");
    $cursor = $collection->find(array("createdAt" => array('$gt' => $session_last, '$lte' => $session_now)));
    // iterate cursor to display title of documents
    foreach ($cursor as $document) {
    echo $document["sender"].": ". $document["message"];
}
$now=日期(“Y-m-d H:i:s”);
$last=$\会话[“最后一条消息”];
$session_last=新MongoDate(strotime($last));
$session_now=新的MongoDate(strotime($now));
$\u会话[“最后一条消息”]=$now;
尝试
{
$m=new Mongo();//连接
$db=$m->selectDB(“本地”);
}
捕获(MongoConnectionException$e)
{
echo'无法连接到mongodb,“mongo”进程正在运行吗?

; 退出(); } $collection=$db->selectCollection(“消息”); $cursor=$collection->find(数组(“createdAt”=>array(“$gt'=>$session\u last,$lte'=>$session\u now)); //迭代光标以显示文档的标题 foreach($cursor作为$document){ echo$document[“发件人”]。“:”$document[“消息”]; }
那么你的问题是?@davejal我的问题是如何更改我的php以只查找新消息(比上一组消息旧)为什么不使用查询获取最后5或10条消息?仅显示这些?@davejal,因为在这种情况下,我将丢失最后一组和最后5或10条消息之间的所有消息。这里的逻辑表明,如果您的消息按日期存储,则只需请求比客户端在请求中的最后一条消息日期更新的消息,并将其传递给查询。但是,让服务器根据结果在websocket连接上“推送”,而不是让客户端定期查找“新消息”,可能会更好地为您服务。但这取决于您真正想要在这里实现什么。所以您的问题是?@davejal我的问题是如何更改我的php以仅查找新消息(比上一组消息旧)为什么不使用查询获取最后5或10条消息?仅显示这些?@davejal,因为在这种情况下,我将丢失最后一组和最后5或10条消息之间的所有消息。这里的逻辑表明,如果您的消息按日期存储,则只需请求比客户端在请求中的最后一条消息日期更新的消息,并将其传递给查询。但是,让服务器根据结果在websocket连接上“推送”,而不是让客户端定期查找“新消息”,可能会更好地为您服务。但这取决于你在这里真正想要实现什么。