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}”作为更新函数的第三个参数。