Reputation: 6378
When I use mongo Command Prompt to get data, it works fine:
But when I do it using mongoose in node.js, I don't get referenced data.
Here is my code:
In Model:
module.exports.getOrderBysalesOrderId = function(salesOrderId, callback){
Order.find({salesOrderId: salesOrderId}).exec(function(err, order){
if(err) return callback(err, null);
callback(null, order);
});
};
In Route:
router.get('/:salesOrderId', function(req, res, next){
var salesOrderId = req.param('salesOrderId');
console.log('order with 1 param is called.');
Order.getOrderBysalesOrderId(salesOrderId, function(err, order) {
if (err) {
return console.error(err);
} else {
//respond to both HTML and JSON. JSON responses require 'Accept: application/json;' in the Request Header
res.format({
//response in dust or jade files
html: function(){
res.render('Order', {
title: 'Order',
"order" : order
});
},
//JSON response will show all orders in JSON format
json: function(){
res.json(order);
}
});
}
});
});
Then using Ajax, I try to get the data and print it to console:
$.ajax(
{
type: "GET",
url: "/Order/" + orderNo,
dataType:"json",
async: false,
beforeSend: function(jqXHR, settings)
{
console.log(settings.url);
},
success: function(order)
{
console.log(order);
templateData = order;
},
error: function(xhr, textStatus, errorThrown)
{
alert('ajax loading error... ... '+ url + query);
}
});
Output in Console:
Here is the structure of my model:
var mongoose = require('mongoose');
var orderSchema = new mongoose.Schema({
salesOrderId: String,
orderDate: Date,
party: {type: mongoose.Schema.Types.ObjectId, ref:'Party'},
items:[{type: mongoose.Schema.Types.ObjectId, ref:'Item'}, {quantity: Number}, {rate: Number}],
dispatches:{
invoiceId: Number,
dispatchDate: Date,
items: [{type: mongoose.Schema.Types.ObjectId, ref:'Item'}, {quantity: Number}, {rate: Number}]
}
});
When I try to get data using populate(), here is my query:
module.exports.getOrderBysalesOrderId = function(salesOrderId, callback){
Order.find({salesOrderId: salesOrderId}).populate("items").exec(function(err, order){
console.log(order);
if(err) return callback(err, null);
callback(null, order);
});
};
Here I get error:
Now I tried the below mentioned code in model:
module.exports.getOrderBysalesOrderId = function(salesOrderId, callback){
salesOrderId = mongoose.Types.ObjectId(salesOrderId);
Order.find({salesOrderId: salesOrderId}).populate("party").exec(function(err, order){
console.log(order);
if(err) return callback(err, null);
callback(null, order);
});
};
Here is my db.js file:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/RateDifferenceDB')
Now, I get another error:
I also get a url error in console of browser:
Upvotes: 0
Views: 266
Reputation: 6378
I should use lean function to get results :
module.exports.getOrderBysalesOrderId = function(salesOrderId, callback){
Order.find({salesOrderId: salesOrderId}).lean().exec(function(err, order){
if(err) return callback(err, null);
callback(null, order);
});
};
Upvotes: 1