修改猫鼬对象文字结果不起作用[重复]

Posted

技术标签:

【中文标题】修改猫鼬对象文字结果不起作用[重复]【英文标题】:Modifying mongoose object literal result does not work [duplicate] 【发布时间】:2012-03-02 20:35:47 【问题描述】:

可能重复:Why can’t you modify the data returned by a Mongoose Query (ex: findById)

首先我对 mongoDB 进行查询,得到所有正确的结果,但只有对对象文字的小修改不起作用。我想要做的是向 cmets 添加新字段。我尝试使用 DBref 方法,但它不起作用,所以我现在进行 2 次查询。

var query = Rss.findOne( _id: itemId);
query.exec(function(err, feed) 
  if (!err && feed.comments) 
    console.log(feed.comments.length);
    for (var index in feed.comments) 
      var author = feed.comments[index].author;
      if (author !== undefined) 
        User.findById(author, function(err, user) 

          /**Problem is here **/
          feed.comments[index].name = 'Some random field';
          console.log('Added new field' + util.inspect(feed));

        );
      

    
  
);

响应也是这样,没有缺少 .name 字段。

Added new field _id: 4f34f343c7b0434217000012,
  original_link: 'http://com',
  publish_date: Fri, 10 Feb 2012 10:36:00 GMT,
  summary: 'some text',
  title: 'title exampel',
  comments: 
   [  body: 'well',
       author: 4f30265e6f60dc061d000002,
       _id: 4f34f3b6f96c58541700000f,
       create_date: Fri, 10 Feb 2012 10:38:46 GMT  ],
  create_date: Fri, 10 Feb 2012 10:36:51 GMT 

// 编辑更多信息

嗯,我还没有找到答案,但是一些 console.log(feed.cmets[index]) 如何返回对函数的引用。也许对 mongoosejs 有更多经验的人可以解释在这种情况下有什么解决方法。

 [Function] author: 'Some random field' 

【问题讨论】:

我不知道它返回一个函数,但你的“索引”没有做你想做的事。您不应该使用for..in 循环数组。使用适当的for 循环和范围。 findById 也是异步的,你永远不会捕获索引是一个新的范围,所以在设置名称时你总是会使用最后一个索引。 是的,这是真的,解决最后一个问题的最佳方法是什么? 您需要在新范围内捕获数组索引。通常你会用(function(index) ... )(index); 包装for 查找的内容。这会创建并立即执行一个新函数,因此函数内 index 的值会在带有 findOne 回调的闭包中捕获。 【参考方案1】:

您必须告诉 Mongoose 将结果转换为正确的对象。在修改提要对象之前,只需调用:

feed = feed.toObject();

然后你可以添加所有你想要的附加属性。

【讨论】:

谢谢!我花了几个小时才找到这个!现在我知道我在寻找什么,这里是 API 文档的链接:mongoosejs.com/docs/api.html#document_Document-toObject

以上是关于修改猫鼬对象文字结果不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬嵌套查找不起作用[重复]

猫鼬 findByIdAndUpdate 不起作用。 new: true 包括

$.when 承诺对象不起作用[重复]

猫鼬 TTL partialFilterExpression 不起作用?

猫鼬 TTL partialFilterExpression 不起作用?

猫鼬填充不起作用