如何在 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);
您需要安装mongoose
和bluebird
才能工作:
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