【问题标题】:insert document into mongodb array using mongoose, nodejs使用猫鼬,nodejs将文档插入mongodb数组
【发布时间】:2017-02-25 00:25:32
【问题描述】:

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

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

感谢您的帮助!

编辑

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

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

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案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);
      }
    

    【讨论】:

    • 感谢您的回复...我尝试了您提供的解决方案,但没有插入记录。
    • 现在用我的和你的解决方案创建的记录。错误是因为日期字段的类型转换。但问题是新记录被创建为单独的文档而不是数组。我正在更新我的 Q 有截图。请看那里。
    • 这种情况什么时候发生?这将在您使用 save 方法时发生,因为您正在实例化新的历史记录。如果您只想将对象插入到现有文档中,则只需使用 upsert true 运行 findOneAndUpdate
    • 使用 findOneAndUpdate 的第二个选项现在对我有用。感谢您的帮助。
    • 不错!我会把这个添加到我的答案中,你能接受吗?
    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2013-05-19
    • 1970-01-01
    • 2017-09-14
    • 2020-12-04
    相关资源
    最近更新 更多