gpt4 book ai didi

mongodb - Mongoose/MongoDB - 附加到文档对象数组的简单示例,具有预定义的模式

转载 作者:IT老高 更新时间:2023-10-28 13:25:59 25 4
gpt4 key购买 nike

为简单起见,假设这些是我的集合模式:

var MessageDeliverySchema = new Schema({
from : { type : String },
to : { type : String },
status : { type : String }
});

var Messages = mongoose.model('messages',
new Schema({
id : ObjectId,
user : { type:String },
'sent-messages' : [MessageDeliverySchema]
}));

因此 Messages 集合中的每个文档可能有 4/5 个由 MessageDeliverySchema 定义的 sent-messages

我想做的是有一个 sent-messages 数组,所以每次收到送达收据时,我只需更新 Messages 并附加另一条已发送的消息。

我尝试过的:

var delivered = {
from: 'foo',
to: 'bar',
status: 'delivered'
};

Message.update({_id: '5064aae4154cb34d14000001' },
{$pushAll: { 'sent-messages' : delivered }} , {upsert:true}, function(err, data) {

});

Message.update({_id: '5064aae4154cb34d14000001' },
{$push: { 'sent-messages' : delivered }},{upsert:true}, function(err, data) {
});

$pushAll 和 $push 不会将新对象附加到 sent-messages,而是覆盖现有消息。

我想看到的是一组已发送的消息,例如:

{
'sent-messages': [
{
from: 'foo',
to: 'bar',
status: 'delivered'
},
{
from: 'pippo',
to: 'pippo',
status: 'delivered'
},
{
from: 'paul',
to: 'smith',
status: 'undelivered'
}
]
}

最佳答案

我得到的错误是:'Cannot apply $push/$pushAll modifier to non-array'。

我像这样在文档中添加了一个对象:

    Message.update({_id: '5064aae4154cb34d14000001' },
{ 'sent-messages' : delivered }, function(err, data) {
});

然后尝试执行 $push,结果出现上述错误。

所以我删除了文档并使用了 $push 达到了预期的效果。

作为引用,这是附加到现有文档的正确方法,以及我的问题的答案:

Message.update({_id: '5064aae4154cb34d14000001' },
{$push: { 'sent-messages' : delivered }},{upsert:true}, function(err, data) {
});

关于mongodb - Mongoose/MongoDB - 附加到文档对象数组的简单示例,具有预定义的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com