Думаю, проблема здесь, в этой строке
const list = this.usersmodel.find({ name: name }).exec()
это блок кода asynchronous
, поэтому следующие строки будут выполняться без ожидания разрешения этого списка
вы должны использовать ключевое слово await
, чтобы принудительно использовать javascript, чтобы дождаться выполнения этой строки перед выполнением следующих строк
const list = await this.usersmodel.find({ name: name }).exec()
также, агрегатный конвейер передает все документы заказа в сбор платежей, поскольку к этим заказам в агрегатном конвейере не применяется фильтрация
, поэтому вам нужно добавить стадию $ match в ваш агрегированный конвейер, чтобы добавить список заказов с указанным вами именем
также обратите внимание, что нам также требуется await
в совокупности, так как это асинхронный блок кода, поэтому подождите, пока это агрегирование не будет выполнено, затем выполните оператор return
, чтобы вся функция выглядит примерно так:
async order(name) {
const list = await this.usersmodel.find({ name: name }).exec()
//return list
try {
if(list){
await this.usersmodel.aggregate([ // note the await here
{ $match: { name: name } }, // filtering the orders
{ $out: "payment" } // move them to the payment collection
])
return "data saved in payment collection"
}
}
catch (error) {
return(error.message)
}
}
надеюсь, это поможет