Итак, в настоящее время установка, которая у меня есть, показывает все результаты от пользователей, и это здорово, но я хочу получить только массив, называемый визитами, который пользователи проводят.
Вот как я это настроил до сих пор:
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 - это мой запрос почтальона от бэкэнда, может быть, это поможет? Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не очень хорошо понимаю ваш вопрос. Но если вы хотите получить данные всех пользователей, вам понадобится заполнить (). В вашем случае лучше поступить следующим образом:
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 Вы имеете в виду, что вам просто нужен массив "visit" со всей информацией о нем?
Итак, как вы видите в моем новом редактировании, идентификатор пользователя перемещается с обратной стороны на интерфейс. Но я не могу понять, как попасть в массив посещений и получить эти два значения: visitsCount и postID @ Reactør.
Я отправил запрос почтальона к бэкэнду, чтобы, возможно, помочь понять мой вопрос? Я не самый опытный! Извините
То, что вы получаете, нормально. Вы должны заполнить данные о своих посещениях, прежде чем возвращать их, как я публикую в своем ответе.
Осталось сделать всего несколько изменений. Вам даже не нужно 15 минут. :)
Позвольте нам продолжить обсуждение в чате.
В настоящий момент я получаю идентификатор пользователя, и это здорово, мне просто нужны значения внутри массива, нет другого способа сделать это?