mongoose返回的数据解构失败.

发布于 2022-09-12 00:15:20 字数 2350 浏览 19 评论 0

业务场景1: 自定义返回的数据格式

async function testPromise() {
  const promiseName = new Promise(resolve => {
    resolve({ name: 'xiaobe' });
  });
  const promiseAge = new Promise(resolve => {
    resolve({ age: '22' });
  });
  const result = await Promise.all([promiseName, promiseAge]);
  const [name, age] = result;
  // return result;
  return {
    ...name,
    ...age,
  };
}

async function test() {
  const res = await testPromise();
  console.log('res', res);
}

test()

/**
* 输出:
* res { name: 'xiaobe', age: '22' }
*/

业务场景2: 返回mongoose查询mongodb返回的数据

// mongodb数据库数据格式
{
    "_id": ObjectId("5de62a3aa1b4c42f7fb66d05"),
    "currentProgress": 10
}

// 获取数据
function fetchClockDay() {
  return new Promise((resolve, reject) => {
    ClockDayModel.findOne({}, { _id: 0 }, (err, res) => {
      if (err) {
        reject(err);
      }
      resolve(res); // 返回格式为{ "currentProgress": 10 }
    });
  });
}

// 请求
async function fetch() {
  const result = await Promise.all([
    fetchDailyDoneNum(),
    fetchDailyDoneProgress(),
    fetchClockDay(),
  ]);
  const [doneNum, doneProgress, clockDay] = result;
  return { doneNum, doneProgress, ...clockDay };
}

/**
* 输出:
* res { doneNum: { doneTaskNum: 10, allTaskNum: 100 },
  doneProgress: { currentProgress: 10 },
  '$__':
   InternalCache {
     strictMode: true,
     selected: { _id: 0 },
     shardval: undefined,
     saveError: undefined,
     validationError: undefined,
     adhocPaths: undefined,
     removing: undefined,
     inserting: undefined,
     saving: undefined,
     version: undefined,
     getters: {},
     _id: undefined,
     populate: undefined,
     populated: undefined,
     wasPopulated: false,
     scope: undefined,
     activePaths:
      StateMachine { paths: {}, states: [Object], stateNames: [Array] },
     pathsToScopes: {},
     cachedRequired: {},
     session: undefined,
     '$setCalled': Set {},
     ownerDocument: undefined,
     fullPath: undefined,
     emitter:
      EventEmitter {
        _events: [Object: null prototype] {},
        _eventsCount: 0,
        _maxListeners: 0 },
     '$options': { skipId: true, isNew: false, willInit: true } },
  isNew: false,
  errors: undefined,
  _doc: { clockDay: 10 },
  '$locals': {},
  '$init': true }
*/

解构部分数据被转换,不清楚是因为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

や三分注定 2022-09-19 00:15:20

实际上mongoose返回的数据并不是object,虽然通过typeof判断类型是Object,但其实mongoose自己封装的一个对象,并且这个对象会对数据进行实时查询以保证其符合预定义的model,而无论添加删除model都不会改变,所以设置无效。

在返回的result对象调用toObject()toJSON()方法,则可以对它进行修改。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文