Reputation: 395
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
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