Почему ключ объекта возвращает неопределенное значение, даже если значение существует

#javascript #typescript #mongoose #nestjs

Вопрос:

Я хочу получить ключ доступа к объекту, но он возвращает неопределенное значение, и я не знаю, почему

Это мой код

 const docs = await this.walletModel.find({  status: 'Venus'  }).select('user meteorite').populate('user', 'name extra.profilePic extra.thumbnail').lean()   // @ts-ignore  const userIds = docs.map(user =gt; Types.ObjectId(user?.user?._id))   const boughtUsers = await this.subscriptionModel.find({ user: { $in: userIds } }).select('-_id user')   const reduced = docs.reduce((acc, curr) =gt; {  // @ts-ignore  if (boughtUsers.some(boughtUser =gt; {  // @ts-ignore  console.log(boughtUser, curr?.user?._id) // logging here   // @ts-ignore  return boughtUser?.user === curr?.user?._id  })) return [...acc, {...curr}]   return [...acc, {...curr, gift: true}]  }, [])   return reduced  

он возвращается

введите описание изображения здесь

как вы можете видеть, есть пользовательские ключи, но когда я пытаюсь войти в систему, он возвращается неопределенным

код

 const docs = await this.walletModel.find({  status: 'Venus'  }).select('user meteorite').populate('user', 'name extra.profilePic extra.thumbnail').lean()   // @ts-ignore  const userIds = docs.map(user =gt; Types.ObjectId(user?.user?._id))   const boughtUsers = await this.subscriptionModel.find({ user: { $in: userIds } }).select('-_id user')   const reduced = docs.reduce((acc, curr) =gt; {  // @ts-ignore  if (boughtUsers.some(boughtUser =gt; {  // @ts-ignore  console.log(boughtUser?.user, curr?.user?._id) // logging here   // @ts-ignore  return boughtUser?.user === curr?.user?._id  })) return [...acc, {...curr}]   return [...acc, {...curr, gift: true}]  }, [])   return reduced  

ВОЗВРАТ

введите описание изображения здесь

Комментарии:

1. Что typeof такое покупаемый пользователь? например console.log(typeof boughtUser)

2. Это возвращаемый объект

3. консоль.журнал(boughtUser.constructor.name) дал бы тип. Вы пробовали console.log(JOSN.stringify(купленный пользователь)) ? Я думаю, что вы добавили // @ts-игнорировать по некоторым причинам. Я могу себе представить, что, удалив его, вы получите предупреждение о типе, которое вы могли бы использовать, чтобы понять, что не так с вашими типами.

Ответ №1:

Я попытался войти в систему с помощью Object.entries (), и он вернул что-то вроде этого

 [  [  '$__',  InternalCache {  strictMode: false,  selected: [Object],  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],  pathsToScopes: {},  cachedRequired: {},  session: null,  '$setCalled': Set(0) {},  ownerDocument: undefined,  fullPath: undefined,  emitter: [EventEmitter],  '$options': [Object]  }  ],  [ 'isNew', false ],  [ 'errors', undefined ],  [ '$locals', {} ],  [ '$op', null ],  [ '_doc', { user: 6179847*******104c5715ee } ],  [ '$init', true ] ]  

Я добавил опцию lean в запрос покупателей и исправил свою проблему