使用mongoose,nodejs

时间:2016-10-15 17:50:53

标签: node.js mongodb mongoose mongoose-schema

我想在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);
                                }

我不确定将文档插入到数组中并在搜索谷歌但未通过后尝试上面。

感谢您的帮助!

修改

现在已成功创建记录但新记录是作为文档创建的,但不是在值数组下创建的。请查看截图(下面给出的链接)

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

1 个答案:

答案 0 :(得分:1)

在您的架构上,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);
  }