【问题标题】:Mongodb how to Insert inside Find Promise? [duplicate]Mongodb如何在Find Promise里面插入? [复制]
【发布时间】:2019-04-20 01:35:47
【问题描述】:

我想将唯一值存储到集合中。我正在使用 Node.js 和 MongoDb。但是,如果我尝试在 Find 承诺中插入,那么它会显示“MongoError:服务器实例池已被破坏”

而且我无法访问 Find promise 之外的集合中的数据。 请帮助我,我真的不明白如何解决这个异步模式。

function addToDBAs( data ){
mongo_client.connect(url, (err, db)=>{
    if(err)
        console.log(err)
    else{
        var dbo = db.db('uniqueSet')
        dbo.createCollection('entities',(err, res)=>{
           if(err)
               console.log(err)
           else{
               console.log("collections created")
               let collection = dbo.collection('entities')
               let dataObjs = []
               collection.find().toArray((err, items) => {

                    data = new Set( data, items )
                    data = Array.from(data)

                    data.map(entity => dataObjs.push({name: entity}))

                    dbo.collection('entities').insertMany(dataObjs)

                console.log(items)
              })
              db.close();
           }
       }) 
    }
})
}

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

您在insertMany 完成之前呼叫db.close()。您需要使用 async / await 或 Promise.then 等待完成 insertMany。然后

应该是这样的(使用 async / await 模式)

dbo.createCollection('entities', async (err, res) => {
if (err) console.log(err)
 else {
  console.log('collections created')
  let collection = dbo.collection('entities')
  let dataObjs = []
  const items = await collection.find().toArray()
  data = new Set(data, items)
  data = Array.from(data)
  data.map(entity => dataObjs.push({ name: entity }))
  await dbo.collection('entities').insertMany(dataObjs)
  db.close()
 }
})

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 2019-10-14
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2015-03-12
    • 2019-03-17
    相关资源
    最近更新 更多