getSiblingDB在foreach循环中不起作用

时间:2019-05-12 13:07:45

标签: javascript arrays mongodb mongodb-query aggregation

  1. 需要从clgID数据库中提取所有testing来自Colleges集合。
  2. Subjects集合,我们在clgID下映射了college.collegeID,Subjects集合,我们需要基于members.student来获取clgID的值。

我的数据库名称:testing1


  

学院

{
    "_id" : ObjectId("5cd42b5c65b41027845938ae"),
    "clgID" : "100",
    "name" : "Vivekananda"
},

{
    "_id" : ObjectId("5cd42b5c65b41027845938ad"),
    "clgID" : "200",
    "name" : "National"
}

点:1 =>将所有clgID从Colleges集合中获取。

  

主题:

{
    "_id" : ObjectId("5cd42c2465b41027845938b0"),
    "name" : "Hindi",
    "members" : {
        "student" : [
            "123"
        ]
    },
    "college" : {
        "collegeID" : "100"
    }
},

{
    "_id" : ObjectId("5cd42c2465b41027845938af"),
    "name" : "English",
    "members" : {
        "student" : [
            "456",
            "789"
        ]
    },
    "college" : {
        "collegeID" : "100"
    }
}

我还有一个名为testing2的数据库,集合名称为UsersLog

  

UsersLog

{
    "StudentPID" : "456",
    "loginTime" : "2019-05-12 10:30:00",
    "logoutTime" : "2019-05-12 15:30:00"
},
{
    "StudentPID" : "456",
    "loginTime" : "2019-05-12 16:00:00",
    "logoutTime" : "2019-05-12 23:00:00"
},
{
    "StudentPID" : "123",
    "loginTime" : "2019-05-12 16:00:00",
    "logoutTime" : "2019-05-12 23:00:00"
}

在此集合中,我们将明智地存储用户 loginTime logoutTime

我的问题是,谁都登录了多于10 hrs,那么只有我必须使用StudentPID并推送到新数组中。

StudentPID集合中,我们将Subjects的值映射到members-> student下,

主要事物Subjectstesting数据库下,UsersLogtesting2数据库下

  

现在我期望的答案

{
"collegeName" : "National",
"StudentName" : "B"
}

因为StudentPID = 456仅登录了两次,并计算了登录时间和注销时间,10 hrs

我的代码

var memberType;
db.Colleges.find({})
.forEach(function(doc){
    var clgID = doc.clgID;
    db.Subjects.find({'college.collegeID' : clgID}).forEach(function(d3){
        memberType = d3.members.student;
        if(memberType.length > 0){
            console.log('ok');
            var records = db.getSiblingDB('testing2');
            records.UsersLog.find({'StudentPID' : { '$in' : memberType }}).forEach(function(loc){
                print(loc); 
            })
        }
    });
})

我已经尽力了,但是我做不到,请任何人更新我的代码

1 个答案:

答案 0 :(得分:0)

使用**findOne**代替find。 在foreach循环中使用find的siblingDB无法正常工作。 因此,请尝试 findOne 而不是查找