let tree = new Map([ [ { "name": "用户管理", "path": "/user", "icon": "icon" }, [ { "name": "查询登陆日志", "path": "/user/查询登陆日志", "icon": "icon" }, { "name": "查询观看日志", "path": "/user/查询观看日志", "icon": "icon" }, ] ], [ { "name": "管理员", "path": "/admin", "icon": "icon" }, [ { "name": "查询登陆日志", "path": "/admin/查询登陆日志", "icon": "icon" }, { "name": "查询权限", "path": "/admin/查询权限", "icon": "icon" }, ] ], [ { "name": "查询权限", "path": "/admin/查询权限", "icon": "icon" }, [ { "name": "修改", "path": "/admin/查询权限/修改", "icon": "icon" }, { "name": "插入", "path": "/admin/查询权限/插入", "icon": "icon" }, ] ] ]); let coll = "auth_menu" const MongoClient = require('mongodb').MongoClient; let dburl = "mongodb://192.168.1.249:27017,192.168.1.249:27018,192.168.1.249:27019/video?replicaSet=mongoRepl&maxPoolSize=200&connectTimeout=30"; MongoClient.connect(dburl, {useUnifiedTopology: true, useNewUrlParser: true}, (err, db) => { if (err) { console.log('数据库连接失败!'); return; } ; let videoDB = db.db("video"); let ps = Array.from(tree.keys()).map(key => { return new Promise(function (resolve, rejcet) { videoDB.collection(coll).findOneAndUpdate( {path: key.path}, {$set: key}, { upsert: true, new: true }, (err, result) => { if (err) { rejcet('数据更新失败' + err) return } ; resolve({id: result.value._id, array: tree.get(key)}) }); }) }) Promise.all(ps).then(pairs => { let pss = pairs.map(pair => { let ps = pair.array.map(e => { return new Promise(function (resolve, rejcet) { videoDB.collection(coll).updateOne({path: e.path}, {$set: {parent: pair.id, ...e}}, {upsert: true}, (err, result) => { if (err) { rejcet('数据插入失败!' + err) return } ; resolve() }); }) }) return ps }) pArry = pss.reduce((a, c) => { return a.concat(a, c) }, []) return Promise.all(pArry) }).then(() => { console.log('完成!'); db.close() }).catch(err => { console.log(err); db.close() }) })