Vishal
Vishal

Reputation: 6378

Mongo Returns full data while Mongoose does not return relative data

When I use mongo Command Prompt to get data, it works fine:

enter image description here

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:

enter image description here

Update:

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}]
  }
});

Update2:

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:

enter image description here

Update3:

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:

enter image description here

I also get a url error in console of browser:

enter image description here

Upvotes: 0

Views: 266

Answers (1)

Vishal
Vishal

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

Related Questions