Mon goose значение поля по умолчанию в схеме не работает - PullRequest
0 голосов
/ 11 марта 2020

Ошибка возникает при вызове функции 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;
} 

1 Ответ

0 голосов
/ 12 марта 2020

Я сделал глупую ошибку. Уникальное поле можно использовать только для свойств документа, но не для элемента в массиве внутри свойства документа.

...