Node.js MongoDB结果可以是console.log(),但不能推送到数组NodeJS
我有一个我想在MongoDB数据库中查找的用户列表,一旦我查找了他们,我想将他们存储在一个数组中,这样我就可以处理数据了。我在NodeJS中使用官方的mongodb包。这是密码Node.js MongoDB结果可以是console.log(),但不能推送到数组NodeJS,node.js,mongodb,asynchronous,async-await,Node.js,Mongodb,Asynchronous,Async Await,我有一个我想在MongoDB数据库中查找的用户列表,一旦我查找了他们,我想将他们存储在一个数组中,这样我就可以处理数据了。我在NodeJS中使用官方的mongodb包。这是密码 var chatsData = [] for (let userID of chatIDs) { db.collection('users').find({ '_id': ObjectId(userID) }).toArray((err, result) => { if (err) thro
var chatsData = []
for (let userID of chatIDs) {
db.collection('users').find({ '_id': ObjectId(userID) }).toArray((err, result) => {
if (err) throw err
chatsData.push(result)
console.log(result)
})
}
}
console.log('vvv Final data in array: vvv')
console.log(chatsData)
当我运行这个代码时,我得到了这个vvv
vvv Final data in array: vvv
[]
[
{
_id: 5eae4c90ad1dd6304c69a75a,
usnm: 'gohjunhao',
eml: 'junhao@gmail.com',
phnm: '00000000',
pswd: '$2a$10$IUaxiweNrUUwxZP6XEQfFeTTnbta13/kv6DdebwJ0WT/bM.3fc5ay',
register_date: 2020-05-03T04:46:08.054Z,
__v: 0
}
]
[
{
_id: 5ead401f8059852114bf9867,
usnm: 'gfox.2020',
eml: 'carrie@gmail.com',
phnm: '11111111',
pswd: '$2a$10$UYaEraoI4Kj0dI.nt5Hbr.LgDL1TNtDOsz7tcxETJW7HRtmgWo.UK',
register_date: 2020-05-02T09:40:47.684Z,
__v: 0
}
]
如何在数组中获得适当的数据数组,以便以后使用?我做错了什么?我需要使用.then语句还是异步等待?
这是完整的代码
MongoClient.connect(url, { useUnifiedTopology: true }).then(async chooseDB => {
db = chooseDB.db('nodejs')
// Get a list of all tables
db.listCollections().toArray((err, result) => {
/***** YOU DON'T NEED TO UNDERSTAND THIS PART OF THE CODE ******/
if (err) throw err
var chatList = []
var chatIDs = []
for (let i = 0; i < result.length; i++) {
const table = result[i]
if (table.name.indexOf(data) > 1) {
// add tables with personal id to chatList
chatList.push(table.name)
// add id's of other chats to out table
chatIDs.push(table.name.replace('dm', '').replace('~', '').replace(data, ''))
}
}
/***** IT'S JUST HOW I GET MY CHAT ID'S *****/
// Get data on users
var chatsData = []
for (let userID of chatIDs) {
try{
let temp = await db.collection('users').find({ '_id': toMongoObjectId(userID) }).toArray()
chatsData.push(temp)
}
catch(error) {
console.log(error)
}
}
console.log('vvv Final data in array: vvv')
console.log(chatsData)
toClient.userData = chatsData
toClient.users = chatList
socket.emit('res_chatList', toClient)
})
})
这可以使用async Wait解决,将async写入then block like的函数
mongoclient.connect().then( async (cli) => {
db = cli.db(dbName);
...
})
您获取数据的逻辑将是
var chatsData = []
for (let userID of chatIDs) {
try{
let temp = await db.collection('users').find({ '_id': ObjectId(userID) }).toArray();
chatsData.push(temp);
}
catch(error) {
console.log(error);
}
}
console.log(chatsData);
您是否想在这个for循环之后尝试使用chatsData,它的行为就像数组是空的一样?是的。我想把mongo结果添加到chatsData中,以后再使用。谢谢你,那时我不理解async/await的概念