-
Notifications
You must be signed in to change notification settings - Fork 0
/
query4.js
51 lines (40 loc) · 1.65 KB
/
query4.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// query 4: find user pairs (A,B) that meet the following constraints:
// i) user A is male and user B is female
// ii) their Year_Of_Birth difference is less than year_diff
// iii) user A and B are not friends
// iv) user A and B are from the same hometown city
// The following is the schema for output pairs:
// [
// [user_id1, user_id2],
// [user_id1, user_id3],
// [user_id4, user_id2],
// ...
// ]
// user_id is the field from the users collection. Do not use the _id field in users.
function suggest_friends(year_diff, dbname) {
db = db.getSiblingDB(dbname);
var pairs = [];
/*
db.users.find().forEach( function (A) {
if (A.gender == "Male") {
db.users.find().forEach( function (A) {
if (B.gender == "Female" && abs(A.YOB - B.YOB) < year_diff && A.friends.indexOf(B.user_id) == -1 && B.friends.indexOf(A.user_id) == -1 && A.user_id != B.user_id && A.hometown.city == B.hometown.city) {
pairs.push([A.user_id, B.user_id]);
}
});
}
});
*/
db.users.find().forEach( function (A) {
if (A.gender == "male") {
db.users.find().forEach( function (B) {
if (B.gender == "female" && Math.abs(A.YOB - B.YOB) < year_diff && A.friends.indexOf(B.user_id) == -1 && B.friends.indexOf(A.user_id) == -1 && A.user_id != B.user_id && A.hometown.city == B.hometown.city) {
pairs.push([A.user_id, B.user_id]);
}
});
}
});
// TODO: implement suggest friends
// Return an array of arrays.
return pairs;
}