我在nestjs上工作,我有两个集合,一个是订单,第二个是付款。现在我需要从收款单中检索一个文档,并将其保存到付款收款中,该收款工作正常,但问题是,当我尝试将第二个文档保存到付款收款中时,我的第一个文档被覆盖。换句话说,第一个文档在提交第二个文档后消失了。我想保存我从订单文件中检索到的付款收款中的每个文件。
以下是服务的代码:
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)
}
}控制器代码-:
@Post('orderdata')
async orderdata(@Body('name')name){
return this.usersService.order(name)
}发布于 2020-05-11 07:37:57
根据文档,$out将用您提供的集合替换整个集合(如果存在),因此当您这样做时,它将替换旧的集合
如果您mongodb版本高于4.2,则可以改用$merge,
在$merge中,它将新文档添加到集合中(如果存在),您还可以定义新文档是否已经存在(保留旧文档或覆盖它)和不存在(插入或忽略它)的行为
您可以在$merge here的文档中看到所有这些内容
此外,您还可以找到$out and $merge here与
在您的代码中,它应该类似于
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)
}
}希望能有所帮助
https://stackoverflow.com/questions/61700144
复制相似问题