Я работаю над схемой mon goose, подобной этой:
const actionSchema = {
actions: {
type: [{
actionName: {
type: String,
required: true
},
count: {
type: Number,
default: 0,
required: true
},
users: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
}]
}};
Это вложенная схема схемы поста. Здесь действия генерируются динамически, и количество людей, выполняющих это действие, поддерживается с помощью count, а их идентичность поддерживается массивом users.
Как видите, действия - это массив объектов, который дополнительно содержит массив пользователей. Я хочу проверить, присутствует ли предоставленный идентификатор пользователя в каком-либо объекте действия, а затем удалить его из массива, а также уменьшить количество.
Совершенно новый для mon goose и mongodb, один простой способ я see - найти сообщение, используя Post.findById()
, который необходимо обновить, запустить цикл js, обновить сообщение и вызвать .save()
. Но это может быть очень дорогостоящим, если в массиве пользователей есть тысячи идентификаторов пользователей. Я попробовал .update()
, но не могу понять, как его использовать в этом случае.
Как насчет добавления метода в модель сообщения (например, postSchema.methods.removeUserAction
)? Это дает доступ к документу из this
и позволяет обновить документ и, таким образом, вызвать .save()
. Загружает ли он полный документ в приложение клиентского узла?
Пожалуйста, предложите правильный путь. Спасибо.