I have 6 Different Collections in my mongodb, the 5 collections are to connected to one connection, But I didn't used ref, instead I made is that I get the Id of 5 collections and then saved it to the 6th collection namely "List" so that I still have common field that I can use as a reference
Here is my Collections structure
list Collection
var ListDoc = new mongoose.Schema({
type_id : {type: String, required: true},
detail_id : {type: String, required: true},
address_id : {type: String, required: true},
inquiries_id : {type: String, required: true},
account_id : {type: String, required: true}
});
module.exports = mongoose.model('List', ListDoc);
Account Collection
var accountDoc = new mongoose.Schema({
email : {type: String, unique: true, required: true},
password : {type: String, required: true}
});
module.exports = mongoose.model('Accounts', accountDoc );
Type Collection
var TypeDoc = new mongoose.Schema({
property_type : {type: String, required: true},
property_class : {type: String, required: true},
property_u_f : {type: String, required: true},
});
module.exports = mongoose.model('Type', TypeDoc);
Detail Collection
var DetailDoc = new mongoose.Schema({
property_name : {type: String, required: true},
property_price : {type: Number, required: true},
property_condition : {type: String, required: true},
property_area : {type: Number, required: true}
});
module.exports = mongoose.model('Detail', DetailDoc);
Address Collection
var AddressDoc = new mongoose.Schema({
street : {type: String, required: true},
bldg_name : {type: String, required: true},
unit_no : {type: String, required: true},
ipcode : {type: Number, required: true},
district : {type: String, required: true},
});
module.exports = mongoose.model('Address', AddressDoc);
Inquiries Collection
var InquiriesDoc = new mongoose.Schema({
inquiries : {type: Number, required: true},
views : {type: Number, required: true},
});
module.exports = mongoose.model('Inquiries', InquiriesDoc);
Note: each collection has different .js file
The list Collection will have the Ids of 4 another Collection.
This is what Im trying to achieve
[ {
"_id": "5907747e424c860f7495ad46",
"account_id": "5908f3381cd9810ea8e2b517",
"type": {
"type" : "apartment",
"class" : "middle"
},
"detail": {
"bedr": 4,
"diningr": 2,
"livingr": 1,
"kitchenr": 1,
"bathr": 4
},
"address": {
"city" : "lucena",
"brgy" : "8",
"street" : "rose",
"bldgno" : "24",
"floorno": "2",
"roomno": "205"
},
"inquiries": {
"views" : 0,
"inquires" : 0
}
},
{
"_id": "5907747e424c860f7495ad47",
"account_id": "5908f3381cd9810ea8e2b517",
"type_id": {
"type" : "apartment",
"class" : "middle"
},
"detail": {
"bedr": 4,
"diningr": 2,
"livingr": 1,
"kitchenr": 1,
"bathr": 4
},
"address": {
"city" : "lucena",
"brgy" : "8",
"street" : "rose",
"bldgno" : "24",
"floorno": "3",
"roomno": "307"
},
"inquiries": {
"views" : 0,
"inquires" : 0
}
}, ]
First I get all the data inside the list collection which is the Ids of 4 Collection and then I tried to loop it so that I can get the another data from other collections
for(var loop =0 ; loop < list.length; loop++){
var pt_id = list[loop].type_id;
var pa_id = list[loop].address_id;
var pd_id = list[loop].detail_id;
var pi_id = list[loop].inquiries_id;
}
I'd use async inside for loop then concate it into "testresult" var using +=
here is my code
var PL = require('../models/list');
var PT = require('../models/type');
var PA = require('../models/address');
var PD = require('../models/detail');
var PI = require('../models/inquiry');
var cryption = require('../services/encrypt_decrypt');
var crypt = new cryption();
var async = require('async');
module.exports.read = function (request, response) {
var decryptedId = crypt.decrypt(request.decode.id);
var propertylistquery = PL.find({}).where('account_id').equals(decryptedId).select({"_id":0,"__v":0});
propertylistquery.exec(function (error, list) {
if (error) {
return response.status(500).send({success: false, error: error, message: 'Something went wrong.'});
}
if (!list) {
return response.status(200).send({success: false, message: 'User not found in the database.'});
}
var testresult;
for(var loop =0 ; loop < list.length; loop++){
var pt_id = list[loop].type_id;
var pa_id = list[loop].address_id;
var pd_id = list[loop].detail_id;
var pi_id = list[loop].inquiries_id;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Getting the property type
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var ptquery = PT.find({}).where('_id').equals(pt_id).select({"__v":0});
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Getting the property address
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var paquery = PA.find({}).where('_id').equals(pa_id).select({"__v":0});
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Getting the property detail
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var pdquery = PD.find({}).where('_id').equals(pd_id).select({"__v":0});
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Getting the propertyinquiry
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var piquery = PI.find({}).where('_id').equals(pi_id).select({"__v":0});
var resources = {
Type : ptquery.exec.bind(ptquery),
Address : paquery.exec.bind(paquery),
Detail : pdquery.exec.bind(pdquery),
Inquiry : piquery.exec.bind(piquery)
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Asynchrozing the queries
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
async.parallel(resources, function (error, results){
if (error) {
response.status(500).send(error);
return;
}
testresult += results;
//console.log(results);
});
}
console.log(testresult);
response.json({success: true, data: list, message: 'Successfully fetched all property.'});
});
};
via JerVi
No comments:
Post a Comment