当前位置: 首页 > 知识库问答 >
问题:

替换文档不能包含原子运算符

陆文康
2023-03-14

我有这个功能来保存新记录或更新现有项:

async function saveEmploy(c){
let employ=new collaboratore();
employ=c;
let docs=c.documenti.length>0?c.documenti:undefined;
if(docs!==undefined){
    let oldDocs=docs.map(d=>{if (d._id) d;});
    oldDocs.forEach(async d=>{
        let oldDoc=await documento.findOneAndReplace({_id:doc._id},doc,{upsert:true});
        employ.documenti.push(oldDoc._id);
    });
    let newDocs=docs.map(d=>{if(!d._id)d;});
    newDocs.forEach(async d=>{
        let newDoc=await d.save();
        employ.documenti.push(newDoc._id);
    });
}

let savedEmploy=null;
if(c._id){
    savedEmploy=await collaboratore.findOneAndReplace({_id:c._id},employ,{new:true,upsert:true});
}
else
    savedEmploy=await employ.save();
console.log('saved');
return savedEmploy;
}

以下是模式:

const collaboratoreschema =new schema({
   dataregistrazione:{type:Date,default:Date.now},
   nominativo:nominativoschema,
   localitanascita:{type:String,required:true,trim:true},
   provincianascita:{type:String,required:true,trim:true},
   datanascita:{type:Date,required:true},
   indirizzoresidenza:{type:indirizzoEmbeddedSchema,required:true},
   indirizzodomicilio:{type:indirizzoEmbeddedSchema,set:v=>!v || v.length===0?undefined:v},
   telefoni:{type:[telefonoschema],required:true},
   indirizziemail:{type:[require('../email.schema.js')],set:v=>!v || v.length===0?undefined:v},
   codicefiscale:{type:String,required:true,uppercase:true,trim:true,match:/^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/},
   note:{type:String,trim:true,set:v=>!v || v===''?undefined:v},
   immagine:imageEmbeddedSchema,
   documenti:[{type:schema.Types.ObjectId,ref:'tbFiles'}],
   datainiziorapporto:{type:Date,required:true},
   datafinerapporto:Date,
   riferimentoazienda:{type:schema.Types.ObjectId,ref:'tbFornitori',set:v=>!v || v==={} || v===''?undefined:v},
   attivo:{type:Boolean,default:true}
},{timestamps:true,useNestedStrict: true,collection:'tbCollaboratori'});

共有1个答案

龙正初
2023-03-14

我敢打赌,您的更新文档(docemploy)包含更新操作($set:{...})。
顾名思义,findOneAndReplace替换文档的内容,因此此处不允许使用update运算符。
很可能需要在此处使用FindoNeadUpdate或确保更新文档包含完整的新记录。
参考这篇文章,findOneAndUpdate和FindoNeandReplace有什么区别?本文MongoDB findOneAndDelete findOneAndUpdate findOneAndReplace也了解详细信息。

 类似资料:
  • 这真的是一个令人头痛的问题,我不知道这里出了什么问题。我几周前才开始使用猫鼬,所以我想知道这是不是我在这里误解了一些基本的东西。

  • 在我的收藏中,只有一份文件。 我的MongoDB是3.2。

  • 我是mongodb和Nodejs的新手,我想知道我的代码有什么问题, 谢谢你!

  • 在这里,我将html内容存储在现在在邮件格式中,我想用存储在中的指定名称替换的文本>和的文本。行显示替换的userName和Passwd,但它不会在处更新。我的代码片段如下。 Jsoup没有更新基本文档 如何解决这个问题?

  • 我正在编写一个小的Java库,其中包含我通常在大多数android应用程序中包含的相关代码。我决定将库导出为一个jar文件,然后将该文件放到我未来项目的libs文件夹中。 null 现在,当我在我的一个android应用程序中使用这个jar时,除了Doc部分之外,所有的一切都像预期的那样运行。当我悬停在我的库的类和方法上时,我看不到我编写的文档注释。 Q1:我是不是又少了一步? Q2:jar文件应

  • 我有一个活动,它包含一个片段容器(FrameLayout),我在Activity.onCreate()期间在其中放置了一个片段。片段包含一个包含一串片段的ViewPager。所有这些工作都很好。页面内容显示,我可以很好地在页面中滑动,甚至可以看到操作栏中的操作,因为贡献的页面变得可见。 现在我用另一个片段替换包含ViewPager的片段: 此外,我已经用FragmentPagerAdapter替换