Мангуст запускает Get на вложенном массиве

Итак, в настоящее время установка, которая у меня есть, показывает все результаты от пользователей, и это здорово, но я хочу получить только массив, называемый визитами, который пользователи проводят.

Вот как я это настроил до сих пор:

getClicks() {
    this.http
      .get<{ message: string; users: any }>(
        BACKEND_URL_Analytics + '/user-clicks'
      )
      .pipe(
        map(data => {
          return data.users.map(user => {
            console.info(user);
            return {
              _id: user._id,
          *** visits: [user.visitCount] ****
            };
          });
        })
      )
      .subscribe(
        result => {
          this.userAnalytics = result;
          this.userAnalyticsUpdate.next([...this.userAnalytics]);
        },
        error => {
          console.info(error);
        }
      );
 }

Это моя структура базы данных:

const mongoose = require('mongoose');
const uniqueVal = require('mongoose-unique-validator');
const Schema = mongoose.Schema;

const visitsSchema = new Schema ({
  postId: {
    type: String
  },
  visitCount: {
    type: Number,
    default: 1
  }
})

const userSchema = mongoose.Schema({
  email: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: String,
    required: true
  },
  role: {
    type: String,
    required: true
  },
  answers: {
    type: String
  },
  visits: [visitsSchema]
});

userSchema.plugin(uniqueVal);

module.exports = mongoose.model('User', userSchema);

Моя цель - получить идентификатор пользователя, который автоматически создается mongoose, как _ID, что довольно легко сделать. Но тогда мне нужно получить доступ к visits: [visitsSchema].

Это результат console.info от console.info(user);:

{_id: "5b3f839e6633e59b673b4a4e", email: "[email protected]", password: "$2b$10$IJ71o/SSfRDoQY4r./gKaetstvka8fFhh4tk35BUD4ReXaKhw1OrC", role: "admin", visits: Array(2), …}
email:"[email protected]"
password:"$2b$10$IJ71o/SSfRDoQY4r./gKaetstvka8fFhh4tk35BUD4ReXaKhw1OrC"
role:"admin"
visits:Array(2)
0:{visitCount: 3, _id: "5b7c32015f015d5108002e88", postId: "5b5dbba4c67aad56df79f341"}
1:{visitCount: 1, _id: "5b7c32f72f457a517aaef23b", postId: "5b688fb0e90f608916e7548b"}

Массив посещений, показанный в console.info, содержит visitCount и postID, которые мне нужно восстановить и отправить во внешний интерфейс. Любые советы о том, как я могу исправить карту или возвращаемые значения, чтобы получить правильную информацию. Если получить идентификатор слишком сложно, я бы согласился просто получить visitCount и postID, поэтому я могу добавить это в таблицу и отобразить, спасибо!

{
    "message": "Activities were fetched succesfully!",
    "users": [
        {
            "visits": [],
            "_id": "5b3f84246633e59b673b4a50",
            "email": "[email protected]",
            "password": "$2b$10$AZad.DdvPYHS4ttkLkQMyeA5wwe49JoSuJ4DvTO8xdp13gIlmF2Xy",
            "role": "teacher",
            "__v": 0
        },
        {
            "_id": "5b3f839e6633e59b673b4a4e",
            "email": "[email protected]",
            "password": "$2b$10$IJ71o/SSfRDoQY4r./gKaetstvka8fFhh4tk35BUD4ReXaKhw1OrC",
            "role": "admin",
            "visits": [
                {
                    "visitCount": 3,
                    "_id": "5b7c32015f015d5108002e88",
                    "postId": "5b5dbba4c67aad56df79f341"
                },
                {
                    "visitCount": 1,
                    "_id": "5b7c32f72f457a517aaef23b",
                    "postId": "5b688fb0e90f608916e7548b"
                }
            ],
            "__v": 0
       },

Ontop - это мой запрос почтальона от бэкэнда, может быть, это поможет? Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не очень хорошо понимаю ваш вопрос. Но если вы хотите получить данные всех пользователей, вам понадобится заполнить (). В вашем случае лучше поступить следующим образом:

const visitsSchema = new Schema ({
       postId: {
           type: mongoose.Schema.Types.ObjectId, 
           ref: 'Post', // Reference to your Post model
      },
      visitCount: {
          type: Number,
          default: 1
      }
})

const userSchema = mongoose.Schema({
         email: {
             type: String,
             required: true,
             unique: true
         },
         password: {
             type: String,
             required: true
         },
         role: {
             type: String,
             required: true
         },
         answers: {
             type: String
         },
         visits: [{
             type: mongoose.Schema.Types.ObjectId, 
             ref: 'Visits', // Reference to your Visit model
         }]
});

Тогда, я полагаю, у вас есть такая модель:

userSchema.plugin(uniqueVal);

module.exports = mongoose.model('User', userSchema);
module.exports = mongoose.model('Post', postSchema);  // <- I suppose you have this
module.exports = mongoose.model('Visits', visitsSchema); // <- I suppose you have this

Теперь вы можете получить всю информацию о своем пользователе, например, как показано ниже:

User.findOne({email: '[email protected]'})
    .populate({
        path: 'visits',
        populate: { path: 'postId' }
    });

Вы можете использовать populate () на нескольких уровнях.

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

Andrew 07.09.2018 14:29

@Andrew Вы имеете в виду, что вам просто нужен массив "visit" со всей информацией о нем?

Francis Ngueukam 07.09.2018 14:30

Итак, как вы видите в моем новом редактировании, идентификатор пользователя перемещается с обратной стороны на интерфейс. Но я не могу понять, как попасть в массив посещений и получить эти два значения: visitsCount и postID @ Reactør.

Andrew 07.09.2018 14:35

Я отправил запрос почтальона к бэкэнду, чтобы, возможно, помочь понять мой вопрос? Я не самый опытный! Извините

Andrew 07.09.2018 14:39

То, что вы получаете, нормально. Вы должны заполнить данные о своих посещениях, прежде чем возвращать их, как я публикую в своем ответе.

Francis Ngueukam 07.09.2018 14:40

Осталось сделать всего несколько изменений. Вам даже не нужно 15 минут. :)

Francis Ngueukam 07.09.2018 14:43

Позвольте нам продолжить обсуждение в чате.

Andrew 07.09.2018 14:45

Другие вопросы по теме