Ошибка возникает при вызове функции createPost.
Сообщение об ошибке: «E11000 Коллекция ошибок дублированного ключа: photogram-db.posts index: likes_1 dup ключ: {likes: undefined} '
Ошибка возникает из-за повторяющегося значения лайков поле, но поле «лайки» не установлено, чтобы быть уникальным ({unique: true}), и, во-вторых, почему «лайки» не определены, его следует установить по умолчанию в пустой массив, и, наконец, единственное значение, которое должно быть уникальным, - это ссылки на объекты учетной записи в поле «лайки».
Ошибка выдается точно при вызове метода post.save () внутри функции createPost
import {
Schema,
model,
Document
}
from "mongoose";
import {
AccountModel,
IAccountDocument,
IAccount
}
from "./account";
import {
createNotification
}
from "./notification";
import removeItemInArray, { checkIdFn } from "../utilities/removeItemInArray";
import hasItemInArray from "../utilities/hasItemInArray";
import settings from "../settings";
import { searchModel } from "./searchHelper";
export interface IPost {
title: String;
image: Buffer;
text?: String;
}
export interface IPostInit extends IPost {
creator: IAccountDocument["_id"]
}
export interface IPostDocument extends IPostInit, Document {
likes: Array<IAccountDocument["_id"]>;
dislikes: Array<IAccountDocument["_id"]>;
createdAt: Date;
};
const {
Types: {
String,
Buffer,
ObjectId
}
} = Schema;
const PostSchema = new Schema({
title: {
type: String,
required: true
},
text: {
type: String,
require: false
},
image: {
type: Buffer,
require: true
},
createdAt: {
type: Date,
default: new Date(),
required: false
},
creator: {
type: ObjectId,
ref: "Account",
required: true
},
likes: {
type: [{
type: ObjectId,
ref: "Account",
required: false,
unique: true
}],
default: [],
required: false
},
disLikes: {
type: [{
type: ObjectId,
ref: "Account",
required: false,
unique: true
}],
default: [],
required: false
}
});
PostSchema.index({
title: "text",
text: "text"
});
export const createPost = async (settings: IPostInit) => {
const post = new PostModel(settings);
post.createdAt = new Date();
await post.save();
return post;
}