我正在尝试使用在NodeJS中运行的一些打字稿代码在mongodb文档中插入/更新字符串数组。 下面的代码是打字稿,但我想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"]
}
我只想在现有数组的末尾为特定的_id添加数组字符串。
如果我应该使用update,save,$ push,$ pushall等,我不会得到。
有人可以解释一下吗?
答案 0 :(得分:2)
如果我理解正确,问题是pushAll什么都不做或更新返回错误?也许在你的例子中复制粘贴错误,但我认为你在这里有错字。
{ "$pushAll ": { events: events }}
应该是
{ $pushAll: { events: events }}
答案 1 :(得分:2)
您更新和$ pushAll的组合看起来像是您在这里所做的最佳选择 - 它是将数组附加到现有数组。 $ push用于向数组添加元素。 save将涉及获取现有事件数组,附加到它,然后保存文档。
需要删除“$ pushAll”中的额外空格。它可能有引号:“$ pushAll”。
答案 2 :(得分:1)
发现问题,我需要将“{upsert = true}”作为第三个参数传递给更新函数。
答案 3 :(得分:1)
要在这种情况下实现'upsert'语义,您需要使用$addToSet
。如果要添加一组值,则需要输入$each
修饰符。来自mongo shell:
db.events.update(
{ _id: entityId },
{ $addToSet: { $each: events } }
)