mongoDB、ajax、php仅显示新消息
这可能是一个愚蠢的问题,但我认为它将对所有新的mongoDB用户有用,而不仅仅是我自己 我目前正在编写一个实时聊天脚本,以了解mongoDB。我只在聊天中加载新消息,而不是加载所有消息并替换旧消息时遇到问题。这就是我所拥有的 我的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 '&
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连接上“推送”,而不是让客户端定期查找“新消息”,可能会更好地为您服务。但这取决于你在这里真正想要实现什么。