我想嘗試取得資料庫裡面的一筆資料中的content的內容,並傳給參數updateData
可是資料卻無法確實地傳給updateData,中間有陸續用幾個console.log確認數值正確
最後發現在出了collection.find的括號之後數值就跑掉了
以下是我的程式碼,counter是函式外部的一個變數用以控制取得第幾個資料
function readData(counter,updateData){//updateData=[]
MongoClient.connect(mongoUrl,function(err,client){
if (err) throw err;
console.log('Success!');
var db = client.db(dbName);
db.collection('testData',function(err,collection){
if (err) throw err;
collection.find({}).toArray(function(err,docs){
if (err) throw err;
var objKey = Object.keys(docs);//console.log(objKey);
objKey.forEach(function(objectid){
var items = Object.keys(docs[objectid]);//console.log(items);
items.forEach(function() {
updateData = docs[counter]['content'];
client.close();
});
});console.log(updateData);//印出[14, 1, 1, 6, 7 ,3 , 40, 10, 13, 5]
});console.log(updateData);//印出[],出了這個括號後就會變回外部宣告的值[]
});
});
}
想請教各位如何修改外部的updateData?
用callback 把要的資料回傳
或者你可以嘗試用promise的方式
不過你這裡好像沒有用到promise,就沒有列出來了
const mongodb = require('mongodb');
const mongoUrl = 'MONGODB';
const dbName = "DB_NAME";
const collectionName = 'COLLECTION_NAME';
var counter = null;
var updateData = '';
function readData(counter, updateData, done) {//updateData=[]
new mongodb.MongoClient(mongoUrl, { useUnifiedTopology: true }).connect(function (err, client) {
if (err) throw err;
console.log('Success!');
client.db(dbName).collection(collectionName).find({}).toArray((err, docs) => {
if (err) throw err;
var objKey = Object.keys(docs);
// console.log(objKey);
objKey.forEach(function (objectid) {
var items = Object.keys(docs[objectid]);
// console.log(items);
items.forEach(function () {
updateData = docs[counter]['content'];
client.close();
});
});
console.log(docs);//印出[14, 1, 1, 6, 7 ,3 , 40, 10, 13, 5]
done(null, docs);
})
})
}
const a = readData(counter, updateData, (err, data) => {
if(err) console.error(err);
console.log(data);
});