我面临着一个我无法解决的巨大问题。我想获取Mongodb函数collection.find()
的结果,然后将结果放入一个变量中,该变量可以在另一个独立运行的函数中重用。
因为解释起来有些透彻,所以下面是代码:
client.connect(function (err) {
assert.equal(null, err);
const db = client.db(myDatabase);
const collection = db.collection(myCollection);
collection.find({}).toArray(function (err, docs) {
//docs is the final result that I want to store in a variable
});
});
$(myInput).change(function() {
//using docs
})
'docs'是回调的结果,我不知道如何在变量中检索它。我试图将整个内容存储在一个变量中,我尝试了全局变量,但是没有任何效果,每次运行程序时我仍然得到undefined
。
所以是的,我可以将函数运行到collection.find()
client.connect(function (err) {
assert.equal(null, err);
const db = client.db(myDatabase);
const collection = db.collection(myCollection);
collection.find({}).toArray(function (err, docs) {
$(myInput).change(function(docs) {
//using docs
})
});
});
但是因为它是我经常运行的函数,所以它会经常调用Mongo,而这并不是性能的最佳选择,尤其是因为我的数据库正在另一台计算机上运行。
答案 0 :(得分:1)
在全局范围内定义docs
,并在find
方法之后分配数据
let docs;
client.connect(async err => {
assert.equal(null, err);
const db = client.db(myDatabase);
const collection = db.collection(myCollection);
try {
// docs is now a global variable containing all of the db collection
docs = await collection.find({});
myFunction();
} catch (error) {
// do something with the error
}
});
function myFunction(){
console.log("print docs", docs)
}
答案 1 :(得分:0)
Mongo也已经在异步中使用了Promise(假设v3 +)
Let doc=[];
client.connect(function (err) {
assert.equal(null, err);
const db = client.db(myDatabase);
Let collection= db.collection(myCollection);
collection.find({})
.then(results=>{
//modify data
doc.push(results);
myfunction();
}
});
function myFunction(){
console.log(doc)
}