In mongoose & node.js
I'd like to GET user's friend's (status is OK) device information. in One query.
UserSchema is below.
var UserSchema = new Schema({
id : { //emaild
type : String,
unique : true
},
device : []
ade : {
friend : [FriendSchema]
}
});
FriendSchema.
var FriendSchema = new Schema({
user_id : {
type : Schema.Types.ObjectId,
ref : 'User'
},
status : {
type : String,
'enum' : ['ok', 'rec', 'rec_none', 'app', 'deny']
},
});
I tried like this. But, there're so many problems...
- Get main user ID from client.
- Query main user info.
- for loop, get friend's user_id who status is 'ok' and store array.
- Query again friend info and store.
- Return to client.
I googled and some pages let me do mapreduce but I don't know how can I do it.
Added----------------------
User DB
{
"_id" : ObjectId("55f2258cef24cf80230e0b36"),
"id" : "a@gmail.com",
"device" : [
{
"os" : "iOS",
"version" : "8.4.1",
"token" : "(null)",
"locale" : "en"
}
],
"ade" : {
"friend" : [
{
"status" : "app",
"user_id" : ObjectId("55f22820ef24cf80230e0b37")
}
]
}
}
{
"_id" : ObjectId("55f66fefef24cf80230e0b3a"),
"id" : "b@gmail.com",
"ade" : {
"friend" : [
{
"status" : "ok",
"user_id" : ObjectId("55f22820ef24cf80230e0b37")
}
]
},
"device" : [
{
"os" : "Android",
"version" : "6.0",
"token" : "t",
"locale" : "en"
},
{
"os" : "Android",
"version" : "6.0",
"token" : "t",
"locale" : "en"
}
]
}
{
"_id" : ObjectId("55f22820ef24cf80230e0b37"),
"id" : "c@gmail.com",
"ade" : {
"friend" : [
{
"status" : "ok",
"user_id" : ObjectId("55f66fefef24cf80230e0b3a")
},
{
"status" : "rec",
"user_id" : ObjectId("55f2258cef24cf80230e0b36")
}
]
},
"device" : [
{
"os" : "Android",
"version" : "4.4.2",
"token" : "t",
"locale" : "en"
}
]
}