MongoDB的Upsert添加到数组

我试图插入/更新在一个MongoDB文档中使用NodeJS中运行的一些打字稿代码的string数组。 下面的代码是打字稿,但我想JS开发人员将得到它没有任何问题:

export function addEvents(entityId: string, events: string[] , callback: () => void) { db.collection('events', function(error, eventCollection) { if(error) { console.error(error); return; } eventCollection.update({ _id: entityId }, { "$pushAll ": { events: events }}, function(error, result) { if(error) { console.error(error); return; } callback(); }); }); } 

该文件具有以下结构:

 { _id : string events : ["array","of","strings"] } 

我只是想在现有数组的末尾附加一个数组string作为特定的_id。

我不明白,如果我应该使用更新,保存,$推,$ pushall等

有人可以解释吗?

如果我理解正确的问题是,pushAll什么都不做或更新返回错误? 也许在你的例子中复制粘贴错误,但我认为你在这里有错字。

 { "$pushAll ": { events: events }} 

它应该是

 { $pushAll: { events: events }} 

更新和$ pushAll的组合看起来就像是你在这里所做的最好的select – 这是为了将一个数组添加到现有的数组中。 $ push是为数组添加一个元素。 保存将涉及获取现有的事件数组,附加到它,然后保存文档。

“$ pushAll”中的额外空间需要被删除。 它可能有引号:“$ pushAll”。

为了在这种情况下实现'upsert'语义,你需要使用$addToSet 。 如果你有一个要添加的值的数组,你需要抛出$each修饰符。 从mongo shell:

 db.events.update( { _id: entityId }, { $addToSet: { $each: events } } ) 

发现问题,我需要传递“{upsert = true}”作为更新函数的第三个参数。