如何在 mongodb 中自动插入记录(nodejs、express、mongoose)

Posted

技术标签:

【中文标题】如何在 mongodb 中自动插入记录(nodejs、express、mongoose)【英文标题】:How to insert record automatically in mongodb (nodejs, express, mongoose) 【发布时间】:2017-01-22 11:04:39 【问题描述】:

我正在从事一个基于团队的项目。我创建了一个包含一些记录的新集合(手动插入)。是否有任何脚本或代码可以从代码中自动插入这些记录,以便我的同事在工作时不需要再次插入这些记录。

代码:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var ServiceCategoryTypeSchema = new Schema(
        _id: type: String,
        name:String
    , 
        collection:'service_category_type',
        timestamps:createdAt:'created_at', updatedAt:'updated_at'
    
);


module.exports = 
    getModel: function(db)
        return db.model("ServiceCategoryType", ServiceCategoryTypeSchema)
    ,
    schema:ServiceCategoryTypeSchema
;

这是记录,我想自动添加,

 
    "_id" : "Inventory", 
    "name" : "Inventory"

 
    "_id" : "Non-inventory", 
    "name" : "Non-inventory"

 
    "_id" : "Service", 
    "name" : "Service"

【问题讨论】:

我用一个工作示例更新了我的答案。 【参考方案1】:

当您将模型保存在 YourModel 中时,您应该能够使用以下内容保存您在 yourData 中的数据:

new YourModel(yourData).save(function (error, data) 
   // handle errors, log success etc.
);

您可以根据需要处理任意数量的数据。

当您使用一些数据填充数据库时,最好先检查数据库是否尚未填充。

示例

这是一个保存此类数据的工作示例程序 - 我更改了数据库和集合名称,以便您在运行时不会弄乱您的真实数据库:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var P = mongoose.Promise = require('bluebird');

mongoose.connect('mongodb://localhost/poptest');

var TestModel = mongoose.model('TestModel', new Schema(
        _id: String,
        name: String
    , 
        collection: 'testcollection',
        timestamps: createdAt: 'created_at', updatedAt: 'updated_at'
    
));

var sampleData = [
    _id: "Inventory", name: "Inventory",
    _id: "Non-inventory", name: "Non-inventory",
    _id: "Service", name: "Service"
];

P.all(sampleData.map(i => new TestModel(i).save()))
    .then(() => console.log('Data saved'))
    .catch((err) => console.log('Error: ' + err))
    .finally(process.exit);

您需要安装mongoosebluebird 才能工作:

npm i mongoose bluebird

它在本地主机上的 poptest 数据库中创建 3 个文档。您可以通过运行来验证它:

mongo poptest

并查询testcollection 集合:

db.testcollection.find();

你应该得到类似的东西:

> db.testcollection.find().pretty();

    "_id" : "Inventory",
    "updated_at" : ISODate("2016-09-14T16:13:37.374Z"),
    "created_at" : ISODate("2016-09-14T16:13:37.374Z"),
    "name" : "Inventory",
    "__v" : 0


    "_id" : "Non-inventory",
    "updated_at" : ISODate("2016-09-14T16:13:37.377Z"),
    "created_at" : ISODate("2016-09-14T16:13:37.377Z"),
    "name" : "Non-inventory",
    "__v" : 0


    "_id" : "Service",
    "updated_at" : ISODate("2016-09-14T16:13:37.377Z"),
    "created_at" : ISODate("2016-09-14T16:13:37.377Z"),
    "name" : "Service",
    "__v" : 0

【讨论】:

谢谢@rsp,我一定会检查你的代码。感谢您的帮助和时间。【参考方案2】:

这个解决方案对我有用:https://github.com/Automattic/mongoose/issues/6326

'use strict'

const mongoose = require('mongoose')
const uri = 'mongodb://localhost/test'
const db = mongoose.createConnection(uri)
const Schema = mongoose.Schema

const testSchema = new Schema(
  name: String,
  age: Number
)

const Test = db.model('test', testSchema)

const test = new Test( name: 'Billy', age: 31 )

db.once('connected', function (err) 
  if (err)  return console.error(err) 
  Test.create(test, function (err, doc) 
    if (err)  return console.error(err) 
    console.log(doc)
    return db.close()
  ) 
)

【讨论】:

以上是关于如何在 mongodb 中自动插入记录(nodejs、express、mongoose)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

bulk.insert(doc) 默认值无法插入 MongoDB nodejs

bulk.insert(doc) 默认值无法插入 MongoDB nodejs

如何在猫鼬中插入自动增量编号

在MongoDB集合中获取第一个插入记录的最佳方法

使用 nodejs 和 chartjs 从 mongodb 插入和获取值