gpt4 book ai didi

javascript - NodeJS + Mongoose 等待子查询

转载 作者:行者123 更新时间:2023-12-02 22:56:21 24 4
gpt4 key购买 nike

我有两个模型:ModelAModelB,我正在尝试从 ModelB 复制 tags = Array()ModelA 中,如下所示:

function run() {

ModelA.find({}).limit(500).cursor()
.on('data', function(doc) {
let refID = doc.ref_id;

ModelB.findOne({_id: refID}).exec(function(err, modelb) {
if (err) {
console.log(`[Error]: Getting modelb ${refID}`);
}
if (modelb) {
if (modelb.tags.length > 0) {
doc.tags = modelb.tags;
}
}
});

doc.processed = true;
doc.save(function(err, hackAlert) {
if (err) {
console.log('[Error]: Saving ModelA: ' + err);
}
console.log(`Saved: ${doc._id}`);
});
})
.on('error', function(err){
console.log('[Error]');
})
.on('end', function(){
console.log('Done');
});
}

该脚本显然使用 processed = true 保存所有 ModelA 实例,但考虑到 Node 的异步特性,ModelA 文档最终没有 >标签

如果你不知道的话,我是新手。我想知道在保存 ModelA 之前完成 ModelB.findOne() 查询的最佳、现代方式是什么?

最佳答案

您只需移动要在第一个查询的回调中调用的代码即可:

function run() {

ModelA.find({}).limit(500).cursor()
.on('data', function(doc) {
let refID = doc.ref_id;

ModelB.findOne({_id: refID}).exec(function(err, modelb) {
if (err) {
console.log(`[Error]: Getting modelb ${refID}`);
}
if (modelb) {
if (modelb.tags.length > 0) {
doc.tags = modelb.tags;
}
}
doc.processed = true;
doc.save(function(err, hackAlert) {
if (err) {
console.log('[Error]: Saving ModelA: ' + err);
}
console.log(`Saved: ${doc._id}`);
});
});
})
.on('error', function(err){
console.log('[Error]');
})
.on('end', function(){
console.log('Done');
});
}

有关使用 async/awaitPromises 的最新方法:

async function run () {

ModelA.find({}).limit(500).cursor()
.on('data', async function (doc) {
let refID = doc.ref_id;
const modelb = await ModelB.findOne({_id: refID}).exec()
.catch(() => console.log(`[Error]: Getting modelb ${refID}`));

if (modelb) {
if (modelb.tags.length > 0) {
doc.tags = modelb.tags;
}
}
doc.processed = true;
await doc.save().exec()
.catch(err => console.log('[Error]: Saving ModelA: ' + err))

console.log(`Saved: ${doc._id}`);
})
.on('error', function (err){
console.log('[Error]');
})
.on('end', function () {
console.log('Done');
});
}

关于javascript - NodeJS + Mongoose 等待子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com