let tree = new Map([ [ { "role": "admin", }, [ "/user", "/user/查询登陆日志", "/user/查询观看日志", "/admin", "/admin/查询登陆日志", "/admin/查询权限", ] ], ]); let authMenuColl = "auth_menu" let authorityColl = "authority" 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 pArray = [] for ([key, value] of tree) { let ps = value.map(e => { return new Promise(function (resolve, rejcet) { videoDB.collection(authMenuColl).findOne({"path": e}, (err, result) => { if (err) { rejcet('查询失败!' + err) return } ; resolve(result._id) }); }) }) let p = Promise.all(ps).then(ids => { return new Promise(function (resolve, rejcet) { videoDB.collection(authorityColl).updateOne( { role: key.role, }, { $set: { ...key, auth: ids, createdAt: (new Date()), updatedAt: (new Date()), } }, {upsert: true}, (err) => { if (err) { rejcet('inset失败!' + err) return } ; resolve() }) }) }) pArray.push(p) } Promise.all(pArray).then(() => { db.close() console.log('完成!'); }).catch(err => { db.close() console.log(err); }) })