【发布时间】:2021-02-01 15:39:33
【问题描述】:
我正在尝试从不同的数据库中进行一些查询,但我无法将它们合并到一个 forAll,以下查询可能由于我无法解决的 async 调用而失败。
var someImageIds = ["111111111111111111"]
use "databaseA"
var transactions = db.transactions.find({"data.transactionImaginaryId": {$in: someImageIds}}) // uses index
use "databaseB"
transactions.forEach(transaction => {
var report = db.reports.find({"metadata.companyId" : parseInt(transaction.data.companyId) , "metadata.originReportId": transaction.data.reportId}).project({}) // uses index
var expenses = db.expenses.find({"metadata.reportId": report._id}) // uses index
var assets = db.assets.find({"_id": report.assets[0].imaginaryId}) // uses index
print(`report with status: ${"report.reportFlow.value"}, ${expenses.count()} expenses, ${assets.count()} assets for ${transaction.data.matchType} transaction _id: ${transaction._id.valueOf()}`)
})
问题是
var report = db.reports.find({"metadata.companyId" : parseInt(transaction.data.companyId) , "metadata.originReportId": transaction.data.reportId}).project({})
返回值undefined,我无法继续查询,因为下一行正在使用该行数据。
关于如何解决这个问题的任何想法? 我正在使用 NoSqlBooster v6.2.8,mongo4,并在 NoSqlBooster 控制台中编写。
谢谢!
感谢@Jeremy Tille,我设法编写了以下 WORKING 代码:
var someImageIds = ["111111111111111111"]
use "databaseA"
var transactions = db.transactions.find({"data.transactionImaginaryId": {$in: someImageIds}}) // uses index
use "databaseB"
transactions.forEach((transaction)=> {
const report = await(db.reports.find({ "metadata.companyId": parseInt(transaction.data.companyId), "metadata.originReportId": transaction.data.reportId }).toArray()) // uses index
const expenses = await(db.expenses.find({ "metadata.reportId": report[0]._id }).toArray()) // uses index
const assets = await(db.assets.find({ "_id": report[0].assets[0].imaginaryId }).toArray()) // uses index
print(`report with status: ${report[0].reportFlow.value}, ${expenses.length} expenses, ${assets.length} assets for ${transaction.data.matchType} transaction _id: ${transaction._id.valueOf()}`)
});
【问题讨论】:
标签: javascript mongodb nosql