Skip to content

中国诗词写入mongodb

Published: at 10:38 AM | 3 min read

原项目地址: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)
            }
        }
    }
 })()