首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用$out聚合将多个数据从一个集合传输到另一个集合

如何使用$out聚合将多个数据从一个集合传输到另一个集合
EN

Stack Overflow用户
提问于 2020-05-10 00:30:57
回答 1查看 71关注 0票数 0

我在nestjs上工作,我有两个集合,一个是订单,第二个是付款。现在我需要从收款单中检索一个文档,并将其保存到付款收款中,该收款工作正常,但问题是,当我尝试将第二个文档保存到付款收款中时,我的第一个文档被覆盖。换句话说,第一个文档在提交第二个文档后消失了。我想保存我从订单文件中检索到的付款收款中的每个文件。

以下是服务的代码:

代码语言:javascript
运行
复制
async order(name){
    const list=await this.usersmodel.find({name:name}).exec()
    //return list
    try{
        if(list){
            const x=await this.usersmodel.aggregate([
                { $match: { name: name } },
                {$out:"payment"}
            ])
            return "data saved in payment collection"
        }
    }
    catch(error){
        return(error.message)
    }
}

控制器代码-:

代码语言:javascript
运行
复制
@Post('orderdata')
async orderdata(@Body('name')name){
    return this.usersService.order(name)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 07:37:57

根据文档,$out将用您提供的集合替换整个集合(如果存在),因此当您这样做时,它将替换旧的集合

如果您mongodb版本高于4.2,则可以改用$merge

$merge中,它将新文档添加到集合中(如果存在),您还可以定义新文档是否已经存在(保留旧文档或覆盖它)和不存在(插入或忽略它)的行为

您可以在$merge here的文档中看到所有这些内容

此外,您还可以找到$out and $merge here

在您的代码中,它应该类似于

代码语言:javascript
运行
复制
async order(name) {
    const list = await this.usersmodel.find({ name: name }).exec()
    //return list
    try {
        if(list) {
            const x = await this.usersmodel.aggregate([
                { $match: { name: name } },
                { $merge: { into: "payment" } } // you can define other options here like if the document already exists, keep the old one or not and so on, all of that you can find in the documentation
            ])
            return "data saved in payment collection"
        }
    }
    catch(error){
        return(error.message)
    }
}

希望能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61700144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档