从Node更新Mongo文档

时间:2012-07-16 22:16:23

标签: node.js mongodb socket.io

所以我将文档插入到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,所以我会知道他们确切的断开连接时间

提前谢谢

1 个答案:

答案 0 :(得分:1)

首先,请阅读有关显式与隐式断开连接的信息:Socket.io: How to handle closing connections?。基本上,显式注销的处理程序(这很好!)应该调用与断开处理程序相同的代码,以防用户没有机会明确注销。

因此,除了您的退出代码,您还需要:

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*/}
)