使用 mongoose、nodejs 将文档插入 mongodb 数组

insert document into mongodb array using mongoose, nodejs

我想在 mongoDB 中插入一条记录。 数据库模型为:

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

我想将新文档插入值数组。

我尝试了以下但出现错误。

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

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

我不确定文档是否插入到数组中,并在 google 上搜索后尝试了上面的操作,但没有成功。

感谢帮助!

编辑

现在已成功创建记录,但新记录是作为文档创建的,但不在值下array.Please看看屏幕截图(link 下面给出)

我想在值中创建新记录,这样创建后的计数将为 2696,而不是创建新的单独文档。 screenshot

在您的模式中,values 是一个数组,但是当您这样做时:

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

您正在将值设置为一个对象。你可以试试:

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