Mongodb 如何在嵌入式数组Mongoose中仅使用findOneAndUpdate投影更新的值?

Mongodb 如何在嵌入式数组Mongoose中仅使用findOneAndUpdate投影更新的值?,mongodb,mongoose,mongodb-query,mongoose-schema,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,当前我的用户模型如下所示: { _id: 'SomeId' firstName: 'John', lastName: 'Cena', books: [ { _id: 'xyz', title: 'a', author:'b', ratings:[ {source:'source1', value:"8"}, {source:'source2', value:"9"}] }, { _id: 'abc

当前我的用户模型如下所示:

{
  _id: 'SomeId'
  firstName: 'John',
  lastName: 'Cena',
  books: [
  { 
   _id: 'xyz',
    title: 'a', 
    author:'b', 
    ratings:[
      {source:'source1', value:"8"},
      {source:'source2', value:"9"}] 
  },

  {
    _id: 'abc',
    title: 'c', 
    author:'d',
    ratings:[
      {source:'source3', value:"7"},
      {source:'source4', value:"5"}] 
   }
 ]
}
在对给定来源(如“source1”)的第一个图书对象(_id:“xyz”)的值从8到10进行findOneAndUpdate查询后,:

我的代码正确地更新了books=>rating=>value,但是我无法获得那本书的更新评级。 这使我对所有包含更新值和未更新值的书籍进行了评级。看起来像:-

{
  books: [{ ratings:[{source:'source1', value:"10"},{source:'source2', value:"9"}] },
          { ratings:[{source:'source3', value:"7"},{source:'source4', value:"5"}] }]
} 
我认为根据我的代码,第二本书的数据根本不应该存在。我期望得到以下结果:

{
  books: [{ ratings:[{source:'source1', value:"10"}] }    
}
请帮助我正确地编写
findOneAndUpdate
查询

您可以这样使用:

const updatebookSource=(sourceId、userId、bookId)=>{
User.findOneAndUpdate({u-id:userId,“books.\u-id”:bookId},up,filter).exec(
(错误,文档)=>{
如果(错误)抛出错误;
让res=doc.books[0]。ratings.find(rating=>{
return rating.source==sourceId;
});
log(JSON.stringify(res,null,1));
}
);
};
这将返回更新的对象。让我知道它是否有效。

您可以这样使用:

const updatebookSource=(sourceId、userId、bookId)=>{
User.findOneAndUpdate({u-id:userId,“books.\u-id”:bookId},up,filter).exec(
(错误,文档)=>{
如果(错误)抛出错误;
让res=doc.books[0]。ratings.find(rating=>{
return rating.source==sourceId;
});
log(JSON.stringify(res,null,1));
}
);
};

这将返回更新的对象。让我知道它是否有效。

所以你只想要
{books:[{ratings:[{source:'source1',value:'10'}}}
或者只有那个评级对象的整个文档?
{books:[{ratings:[{source:'source1',value:'10'}}
只想要
{books:[{ratings:[{source source source 1',value:'10'}}}}}
或仅包含该评级对象的整个文档?
{books:[{ratings:[{source:'source1',value:'10'}]}
仅限此!请参阅下面我的回答
{
  books: [{ ratings:[{source:'source1', value:"10"}] }    
}