mongoose中使用了lean也无法修改返回值?

  1. 使用了nodejs + mongoose
  2. 代码如下
  const pkgInfo = await PkgModel.findOne({ _id }).populate({
    path: 'cover',
    populate: {
      path: 'tag'
    },
  }).populate({
    path: 'files',
    populate: {
      path: 'tag'
    },
    options: [{
      lean: true,
    }],
  }).lean(true);

  pkgInfo.files[0].fileUrl = '{a:1}';
  // 断点
  res.send({
    status: 1,
    msg: 'success',
    data: pkgInfo,
  });

想给files[0]加个fileUrl属性;
断点发现files[0]对象有‘fileUrl’属性,但是send后接收到的pkgInfo就没这属性了;

尝试将已有属性pkgInfo.files[0].key = '11',send后正常收到,但是pkgInfo.files[0].key = {},send后key就不变,key的类型为String;

3.请问如何给pkgInfo.files里的每个对象加上fileUrl属性?


似乎找到了原因

  }).populate({
    path: 'files',
    populate: {
      path: 'tag'
    },

以上代码想要populate tag,但是files没有tag,model里有定义,但document里没值;
去掉populate tag后发现能正常修改pkgInfo.files了;
但是为什么会这样呢?

阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题