Попытка реализовать условный оператор, опирающийся на массив объектов поддокументов, поэтому мне нужно выполнить итерацию по коллекции пользователей в базе данных и проверить внутри каждого массива объектов поддокумента пользователя с findIndex, как для javascript
Коллекция пользователей
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
required: true,
lowercase: true
}
friends: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
family: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
acquaintances: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
following: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
],
pendingFriendConfirmationData:[
{
storedUserId : {type: String},
choosenCategories: [{label: {type: String}, value: {type: String}}]
}
]
});
const Users = mongoose.model("Users", userSchema);
module.exports = Users;
теперь я могу получить доступ к коллекции Users с помощью
db.Users.find()
моего примера результата для
let filter = {"_id": userId}
let projection = {username: 1, friends: 1, family: 1, acquaintances: 1, following: 1, pendingFriendConfirmationData: 1}
db.Users.findOne(filter, projection, (err, user)=>{
console.log(user)
})
{
friends: [],
family: [],
acquaintances: [],
following: [],
_id: 5ca1a43ac5298f8139b1528c,
username: 'ahmedyounes',
pendingFriendConfirmationData: [
{
choosenCategories: [Array],
_id: 5ccb0fcf81a7944faf819883,
storedUserId: '5cc95d674384e302c9b446e8'
}
]
}
с акцентом на pendingFriendConfirmationData на следующем скриншоте из MongoDB Compass
Я хочу повторить, как это
let filter = {"_id": userId}
let projection = {username: 1, friends: 1, family: 1, acquaintances: 1, following: 1, pendingFriendConfirmationData: 1}
db.Users.findOne(filter, projection, (err, user)=>{
let data = user.pendingFriendConfirmationData
for(let i in data){
if(data[i].choosenCategories.findIndex(v => v.label === "friend") !== -1){
console.log("he is a friend")
}
}
})
Как перебирать pendingFriendConfirmationData и choosenCategories, как указано выше
на данный момент, если я console.log (данные) следующим образом
db.Users.findOne(filter, projection, (err, user)=>{
let data = user.pendingFriendConfirmationData
console.log(data)
})
я получаю