Найти и обновить несколько объектов в Mon goose js - PullRequest
0 голосов
/ 10 июля 2020

Проблема: Я использую sh для обновления нескольких объектов из моей схемы массива. Я пробовал следующее предложение, которое я нашел здесь: Найти и обновить объект в понедельник goose

Да, это работает, однако это обновит только первый элемент в моем массиве messages_details, который содержит желаемый объект.

await MessagesDetails
    .update(
        {
            _id : message_id,
            messages_details : {
                $elemMatch : {
                    user_id: user_id
                }
            }
        },
        {
            $set: {
                'messages_details.$.message_isRead': true,
            }
        }
    )

Вот моя схема ниже:

const mongoose  = require('mongoose')
const Schema    = mongoose.Schema

const MessagesDetails = new Schema({
    _id : Schema.Types.ObjectId,
    messages_details_subject : {
        type : String,
        required : true
    },
    messages_details_sender : {
        type : Array,
        required : true
    },
    messages_details_recipient : {
        type : Array,
        required : true
    },
    messages_details_created : {
        type : Date,
        required : true
    },
    messages_details_updated : {
        type : Date,
        required : true
    },
    messages_details_isArchived : {
        type : Boolean,
        required : true
    },
    messages_details : [
        {
            user_id : Schema.Types.ObjectId,
            user_username : {
                type : String,
                required : true
            },
            message_content : {
                type : String
            },
            message_date : {
                type : Date
            },
            message_isArchived : {
                type : Boolean
            },
            message_isRead : {
                type : Boolean
            }
        }
    ]
})

module.exports = mongoose.model( 'messages_details', MessagesDetails )

Итак, моя конечная цель здесь - установить для message_isRead значение true на основе этих запросов ниже;

_id 
messages_details.user_id 

Кто-нибудь, пожалуйста, просветите меня?

1 Ответ

0 голосов
/ 10 июля 2020

Для этого можно использовать оператор $[] - :

await MessagesDetails
    .update(
        {
            _id : message_id,
            messages_details : {
                $elemMatch : {
                    user_id: user_id
                }
            }
        },
        {
            $set: {
                'messages_details.$[].message_isRead': true,
            }
        }
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...