中国诗词写入mongodb

Table of Contents

    原项目地址:https://github.com/chinese-poetry/chinese-poetry
    将其json写入mongodb

    代码如下:

    const fs = require('fs')
    const path = require('path');
    const mongoose = require('mongoose');
    const option = {
        reconnectTries: Number.MAX_VALUE,
        reconnectInterval: 3000,
        useNewUrlParser: true,
    }
    mongoose.connect('mongodb\://127.0.0.1:27017/chinese-poetry', option);
    
    const AuthorSongSchema = new mongoose.Schema({
        name: { type: String },
        short_description: { type: String },
        description: { type: String }
    })
    
    const CiSongSchema = new mongoose.Schema({
        author: { type: String },
        rhythmic: { type: String },
        paragraphs: { type: [String] }
    })
    
    const AuthorsSchema = new mongoose.Schema({
        name: { type: String },
        desc: { type: String }
    })
    
    const PoetSchema = new mongoose.Schema({
        author: { type: String },
        title: { type: String },
        paragraphs: { type: [String] },
        strains: { type: [String] }
    })
    
    const LunyuSchema = new mongoose.Schema({
        chapter: { type: String },
        paragraphs: { type: [String] }
    })
    
    const ShijingSchema = new mongoose.Schema({
        title: { type: String },
        chapter: { type: String },
        section: { type: String },
        content: { type: [String] }
    })
    
    const AuthorSongModel = mongoose.model('author_song', AuthorSongSchema);
    const CiSongModel = mongoose.model('ci_song', CiSongSchema);
    const AuthorsSongModel = mongoose.model('authors_song', AuthorsSchema);
    const AuthorsTangModel = mongoose.model('authors_tang', AuthorsSchema);
    const PoetSongModel = mongoose.model('peot_song', PoetSchema);
    const PoetTangModel = mongoose.model('peot_tang', PoetSchema);
    const LunyuModel = mongoose.model('lunyu', LunyuSchema);
    const ShijingModel = mongoose.model('shijing', ShijingSchema);
    
    let jsonFileList = []
    const handler = {
        'author.song': async (item) => { await new AuthorSongModel(item).save() },
        'ci.song': async (item) => { await new CiSongModel(item).save() },
        'authors.song': async (item) => { await new AuthorsSongModel(item).save() },
        'authors.tang': async (item) => { await new AuthorsTangModel(item).save() },
        'poet.song': async (item) => { await new PoetSongModel(item).save() },
        'poet.tang': async (item) => { await new PoetTangModel(item).save() },
        'lunyu': async (item) => { await new LunyuModel(item).save() },
        'shijing': async (item) => { await new ShijingModel(item).save() },
    }
    function getFileList(dir) {
        const files = fs.readdirSync(dir);
        for (const file of files) {
            const subfile = path.join(dir, file)
            const stat = fs.lstatSync(subfile)
            if (stat.isDirectory()) {
                getFileList(subfile)
            } else if (stat.isFile()) {
                if (subfile.includes('.json')) {
                    jsonFileList.push(subfile)
                }
            }
        }
    }
    
     (async function() {
        getFileList(path.join(__dirname, 'chinese-poetry'))
        for (const file of jsonFileList) {
            const nameArr = path.basename(file).split('.')
            const n = Math.min(2, nameArr.length - 1) // 去掉.json
            let shortname = ''
            for (let i = 0; i < n; i++) {
                shortname = shortname + (shortname.length ? '.' : '') + nameArr[i]
            }
            
            if (handler[shortname]) {
                console.log(file)
                try {
                    const itemList = JSON.parse(fs.readFileSync(file, 'utf-8'))
                    for (const item of itemList) {
                        await handler[shortname](item)
                    }
                } catch (err) {
                    console.log(err)
                }
            }
        }
     })()