Mongodb删除没有相关文档的文档

Rom*_*cea 0 mongodb

是的标题可能听起来很傻但我有两个集合:访客和聊天.聊天有访客,而访客有很多聊天.我会定期删除last_activity字段低于x天的访问者,但我不想删除有聊天的访问者,所以我需要一种方法delete from visitors where last_activity < days_unix_milliseconds and _id not in(select visitor_id from chats)

我有第一部分的工作代码(最后一个活动),需要第二部分的帮助:

Visitors.remove({
    last_update: {
        $lt: (new Date()).getTime() - 3600000 * 24 * 7
    }
}, function(error){

});
Run Code Online (Sandbox Code Playgroud)

Der*_*ick 6

我的建议是更改您的架构,以便您只需一个查询即可完成此操作.在这种情况下,我可能会只保留一个字段visitor,告诉你它有多少聊天.每次用户开始聊天时,您都可以简单地增加:

db.visitors.update( { visitor_id: XXX }, { $inc: { 'chat_count': 1 }  } );
Run Code Online (Sandbox Code Playgroud)

当它结束时:

db.visitors.update( { visitor_id: XXX }, { $inc: { 'chat_count': -1 }  } );
Run Code Online (Sandbox Code Playgroud)

然后删除所有没有聊天的访问者就像这样简单:

db.visitors.remove( { last_activity: { $lt: XXX }, chat_count: { $lt: 1 } } );
Run Code Online (Sandbox Code Playgroud)