Mongoose - 从消息数组中删除一个对象
Mongoose - Remove an object from array of messages
我需要从 mongoose 的消息数组中删除一条消息。我该怎么做?
我的架构:
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,
}
}]
})
我的代码是:
await ChatMessages.updateOne({ room },{ $pull: { messages: { _id: new ObjectId(_id) } }}, { multi: true})
文档示例
id: ObjetId(6051f0bbe23bf3129b8f8eb6)
room:"111"
__v:0
messages: Array
我在这里用我的示例文档重现了这个问题:
{
"_id": ObjectId("604bacf4dfe5ed598c350737")
"array": [
{
"_id": ObjectId("60474814a380df6aade743cd"),
"value": NumberInt(785)
}
]
}
如果我使用 updateOne()
和 multi
选项,它会抛出错误。
所以我用 update()
和 multi
:
执行了它
db.documents.update({ _id: ObjectId("604bacf4dfe5ed598c350737") }, {
$pull: {
array: {
_id: ObjectId("60474814a380df6aade743cd")
}
}
}, { multi: true })
这是结果文档:
{
"_id": ObjectId("604bacf4dfe5ed598c350737")
"array": []
}
所以在你的情况下,保留 new ObjectId(_id)
并使用 update()
应该可以解决问题。如果 $pull
仍然存在问题,则意味着查找查询存在问题:{ room }
.
我需要从 mongoose 的消息数组中删除一条消息。我该怎么做? 我的架构:
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,
}
}]
})
我的代码是:
await ChatMessages.updateOne({ room },{ $pull: { messages: { _id: new ObjectId(_id) } }}, { multi: true})
文档示例
id: ObjetId(6051f0bbe23bf3129b8f8eb6)
room:"111"
__v:0
messages: Array
我在这里用我的示例文档重现了这个问题:
{
"_id": ObjectId("604bacf4dfe5ed598c350737")
"array": [
{
"_id": ObjectId("60474814a380df6aade743cd"),
"value": NumberInt(785)
}
]
}
如果我使用 updateOne()
和 multi
选项,它会抛出错误。
所以我用 update()
和 multi
:
db.documents.update({ _id: ObjectId("604bacf4dfe5ed598c350737") }, {
$pull: {
array: {
_id: ObjectId("60474814a380df6aade743cd")
}
}
}, { multi: true })
这是结果文档:
{
"_id": ObjectId("604bacf4dfe5ed598c350737")
"array": []
}
所以在你的情况下,保留 new ObjectId(_id)
并使用 update()
应该可以解决问题。如果 $pull
仍然存在问题,则意味着查找查询存在问题:{ room }
.