clgID
数据库中提取所有testing
来自Colleges集合。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下,
主要事物Subjects
在testing
数据库下,UsersLog
在testing2
数据库下
现在我期望的答案
{
"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);
})
}
});
})
我已经尽力了,但是我做不到,请任何人更新我的代码
答案 0 :(得分:0)
使用**findOne**
代替find
。
在foreach循环中使用find的siblingDB无法正常工作。
因此,请尝试 findOne 而不是查找