Jitesh
Jitesh

Reputation: 395

insert document into mongodb array using mongoose, nodejs

I want to insert a record into an mongoDB. DB Model is as:

var stockhistory = new Schema({
symbol:   String,
values:   [{
    date:     Date,
    open:     Number,
    close:    Number,
    high:     Number,
    low:      Number,
    adjClose:Number,
    volume:   Number
    }]
});

I want to insert new document to values array.

I have tried the following but getting error.

var insertObj = {
    'date': obj[0].lt,
    'open': obj[0].op,
    'close': obj[0].l,
    'high': obj[0].hi,
    'low': obj[0].lo,
    'adjClose': obj[0].l_fix,
     'volume': obj[0].vo
 };
var sname = 'symbol';
var History = require('../model/stockHistory');
var history = new History({ symbol: sname, values: insertObj });
history.save(function(err) {
    if (err) {
        return err;
    } else {
        console.log("Quote saved");
    }
});

And

History.findOneAndUpdate(
                                {symbol: sname},
                                {$push: {values: insertObj}},
                                {safe: true, upsert: true},
                                function(err, model) {
                                    console.log(err);
                                }

I am not sure about the document insert into array and tried above after searching on google but not getting through.

Thanks for help !

Edit

Records are successfully created now but new records are created as a document but not under values array.Please have a look at screenshot(link given below)

I want to create new record in values so that count after creation will be 2696 instead it created new separate document. screenshot

Upvotes: 0

Views: 598

Answers (1)

andresk
andresk

Reputation: 2845

On your schema, values is an array, but when you do:

var history = new History({ symbol: sname, values: insertObj });

You are setting values as an object. You could try:

var insertObj = {
    'date': obj[0].lt,
    'open': obj[0].op,
    'close': obj[0].l,
    'high': obj[0].hi,
    'low': obj[0].lo,
    'adjClose': obj[0].l_fix,
     'volume': obj[0].vo
   };
var sname = 'symbol';
var History = require('../model/stockHistory');
var history = new History({ symbol: sname, values: insertArr });
History.findOneAndUpdate(
   {symbol: sname},
   {$push: {values: insertObj}},
   {safe: true, upsert: true},
   function(err, model) {
    console.log(err);
  }

Upvotes: 1

Related Questions