Как автоматически вставить запись в mongodb (nodejs, express, mongoose)

0

Я работаю над командным проектом. Я создал новую коллекцию с некоторыми записями (вставлен вручную). Есть ли какой-либо скрипт или код для вставки этих записей автоматически из кода, так что, когда мой коллега будет работать, им не нужно будет вставлять эти записи снова.

Код:

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
    Я обновил свой ответ рабочим примером.
Теги:
express
mongoose

1 ответ

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

Он создает 3 документа в poptest данных poptest на localhost. Вы можете проверить его, выполнив:

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
}
  • 0
    Спасибо @rsp, я обязательно проверю твой код. Спасибо за вашу помощь и время.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню