简体   繁体   中英

Mongoose - Remove an object from array of messages

I need to remove a message from array of messages in mongoose..How can I do this? My Schema:

const ChatMessages = new Schema({
    room: {
        type: Schema.Types.Mixed,
        required: true
    },
    messages: [{
        sender: {
            type: String,
            required: true
        },
        text: {
            type: String,
            required: true
        },
        display: {
            type: String,
            required: true
        },
        date: {
            type: Date,
            default: Date.now,
        }

    }]
})

My code is:

await ChatMessages.updateOne({ room },{ $pull: { messages: { _id: new ObjectId(_id) } }}, { multi: true})

Document Example

id: ObjetId(6051f0bbe23bf3129b8f8eb6)
room:"111"
__v:0
messages: Array

I reproduced the issue with my example document here:

{
    "_id": ObjectId("604bacf4dfe5ed598c350737")
    "array": [
        {
            "_id": ObjectId("60474814a380df6aade743cd"),
            "value": NumberInt(785)
        }
    ]
}

If I go with updateOne() and multi options, it throws an error. So I executed it with update() and multi :

db.documents.update({ _id: ObjectId("604bacf4dfe5ed598c350737") }, {
    $pull: {
        array: {
            _id: ObjectId("60474814a380df6aade743cd")
        }
    }
}, { multi: true })

This is the result document:

{
    "_id": ObjectId("604bacf4dfe5ed598c350737")
    "array": []
}

So in your case, keeping the new ObjectId(_id) and using update() should solve the problem. If there is still a problem with the $pull , it means there is an issue with the find query: { room } .

For more info: https://docs.mongodb.com/manual/reference/operator/update/pull/#remove-items-from-an-array-of-documents

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM