在MongoDB数据库中,我有两个集合。一个引用另一个id
字符串。
收藏集sessions
包含一个字段session-id
,另一个字段active
。
集合visits
包含字段session-id
。多次访问是指一次会议。
我想删除active
为假的所有会话,这是一项简单的任务,但也是所有访问每个已删除会话的访问。
由于MongoDB中没有JOIN
语句,如何选择应该使用一个命令删除的所有访问?
可以通过聚合完成吗?
答案 0 :(得分:2)
这个怎么样?
// unordered bulk operations because basically we have
// decoupled operations anyway
var bulkVisits = db.sessions.initializeUnorderedBulkOp()
// first, we need all inactive session IDs
var inactive_sessions = db.sessions.find({"active":"false"},{_id:1})
inactive_sessions.forEach(
function(session){
// queue the removal of visits which refer to inactive sessions...
bulkVisits.find({"session-id":session._id}).remove();
}
)
// ...execute the removal operations...
bulkVisits.execute()
// and remove the inactive sessions
db.sessions.remove({"active":"false"})
答案 1 :(得分:0)
这可以在聚合中完成
db.sessions.aggregate([
$lookup : {
from"visits",localField:"session-id",
foreignField :"session-id",as : "},
{
$match : {"active" : true}}
])
删除你得到的结果