【问题标题】:How to transfer data of one collection into another of mongodb如何将一个集合的数据传输到另一个 mongodb
【发布时间】:2020-08-24 09:24:20
【问题描述】:

正在研究nestjs。我有两个集合,一个在订单中,第二个是付款,我想从订单集合中检索一个条目并将相同的条目保存到付款集合中。

这是服务的代码:

async order(name){
    const list=this.usersmodel.find({name:name}).exec()
    //return list
    try{
        if(list){
            const x=this.usersmodel.aggregate([
                {$out:"payment"}
            ])
            return "data saved in payment collection"
        }
    }
    catch(error){
        return(error.message)
    }
}

这是控制器的代码:

@Get('orderdata')
async orderdata(@Body('name')name){
    return this.usersService.order(name)
}

通过使用这些代码行,我既没有得到想要的输出,也没有得到任何错误。当我在邮递员中点击 API 时,我得到了“数据保存在付款收集中”,但我没有在我的付款收集中获得条目。

【问题讨论】:

    标签: mongodb typescript postman nestjs


    【解决方案1】:

    我认为问题出在这一行

    const list = this.usersmodel.find({ name: name }).exec()
    

    这是一个asynchronous 代码块,所以下一行将在不等待此列表被解析的情况下执行

    你必须使用await关键字强制javascript等到这一行被执行后再执行下一行

    const list = await this.usersmodel.find({ name: name }).exec()
    

    此外,聚合管道将整个订单文档带到收款处,因为聚合管道中的订单没有应用过滤

    因此您必须将 $match 阶段添加到您的聚合管道中,以便添加具有您指定名称的订单列表

    还要注意,我们也需要聚合中的await,因为这是一个异步代码块,所以等到聚合完成然后执行返回语句

    所以整个函数应该看起来像

    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)
        }
    }
    

    希望对你有帮助

    【讨论】:

    • 我遵循了您的方法,但仍然无法正常工作
    • 是否发生了任何问题或错误?您能否分享更多信息,或者如果可能的话,您能否分享 github 存储库,如果可能的话?
    • 你的方法很好,这是我的错,我现在认识到了我的错。但是出现了另一个问题,您能否为此提供解决方案stackoverflow.com/questions/61700144/…
    • 好的,很酷,您能接受这个作为您问题的答案,以便任何寻求帮助的人都能发现它有帮助吗?
    • 是的,请考虑我的其他查询并尽可能提供解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2020-01-09
    相关资源
    最近更新 更多