0

所以我将文档插入到 mongo db 中

io.sockets.on('connection', function (socket) {
    connectLog(socket.handshake.address.address);

function connectLog(ipAddress) {
   db.collection('tracking', function (err, collection) {
        var currentTime = new Date();
        var doc={"ip":ipAddress, "connect": currentTime, "culture": "en" };
        collection.insert(doc, function () { });
    });

}

我有另一个活动

function logout(id, disconnect) {

我想更新(或替换?)该记录并添加disconnect: (time)到其中。我该怎么做呢?通过这种方式,我可以判断一个人何时连接以及何时断开聊天。

我正在使用 socket.io,所以我会知道他们确切的断开连接时间

先感谢您

4

1 回答 1

1

首先,阅读有关显式与隐式断开连接的内容:Socket.io:如何处理关闭连接?. 基本上,您的显式注销处理程序(这很好!)应该调用与断开处理程序相同的代码,以防用户没有机会显式注销。

因此,除了您的注销代码之外,您还需要:

socket.on('disconnect', handleDisconnect)

在该断开/注销处理程序中,您将希望找到该用户的最新连接文档并对其进行更新。

collection.findAndModify(
 {"address" : address}, //same address 
 [['connect', 'descending']], //the most recent, findAndModify only changes the first doc
 {$set: {disconnect: currentTime}}, //set the disconnect time
 function(err, object){/*deal with errors*/}
)
于 2012-07-17T04:57:21.780 回答