为了账号安全,请及时绑定邮箱和手机立即绑定

我有一个函数,该函数在数据库中调用到我的两个集合的连接,并将其存储在两个数组中,但是我无法访问它

我有一个函数,该函数在数据库中调用到我的两个集合的连接,并将其存储在两个数组中,但是我无法访问它

呼啦一阵风 2021-05-04 21:41:51
我建立了与两个集合的连接,并将其存储在两个数组中,但是由于它的异步性,我无法访问它。此外,我想执行类似SELECT SELECT FROM FROM Student的操作db.student.find({},{roll:1,_id:0});但实施此操作不起作用,只会从集合中获取所有内容。我曾尝试使用async / await,但没有成功。我尝试实现异步(npm模块)并使用了async.series方法,但没有起作用。使用setTimeout来console.log记录值,但是我需要执行一些比较,因此没有帮助。    let collectionOneArr = [];    let collectionTwoArr = [];    let db = client.db('job');    db.collection('one').find({}, {field:1, name: 0}).toArray((err, data) => {        data.forEach(val => collectionOneArr.push(val))    });    db.collection('two').find({}).toArray((err,data) => {        data.forEach(val => collectionTwoArr.push(val))    });   console.log(collectionOneArr) // returns []   console.log(collectionTwoArr) // returns []//    setTimeout(() => console.log(collectionTwoArr, collectionOneArr), 1000);    client.close();    });
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

了解存储在数据库中的对象的外观会有所帮助,但是无论如何我都会尝试回答这个问题。


我可以看到2个问题。


您查询不正确

您需要使用javascript的异步特性:)

1.错误的mongo过滤


您似乎没有以find正确的顺序向方法提供参数,并且实际上并没有告诉mongo按任何内容进行过滤。


mongodb find方法的第一个参数是过滤器对象。这应该正确过滤:


db.collection('one').find({field:1, name: 0}).toArray((err, 

  data.forEach(val => collectionOneArr.push(val))

});

2.异步问题


readyForCompute例如,我们可以使用一个标志来确保仅compute在两个数据库查询完成后才运行该方法。这是一个非常原始的解决方案,无法很好地扩展,但仅执行两个查询就足够了。


let readyForCompute = false;

let arr1 = [];

let arr2 = [];


let db = client.db('job');


db.collection('one').find({name: "value_to_filter_name_field_by"}).toArray((err, data) => {

    arr1 = data;

    if (readyForCompute) compute();

    readyForCompute = true;

});


db.collection('two').find({}).toArray((err,data) => {

    arr2 = data;

    if (readyForCompute) compute();

    readyForCompute = true;

});


function compute() {

    client.close();

    console.log(arr1);

    console.log(arr2);

    // do your computation...

}


查看完整回答
反对 回复 2021-05-20
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信