2012-10-31 94 views
1

我试图在NodeJS中使用一些打字稿代码在mongodb文档中插入/更新字符串数组。 下面的代码是打字稿,但我想JS开发者将得到它的W/O型的任何问题:MongoDB Upsert添加到阵列

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。

我不太得到,如果我要使用更新,保存,$推,$ pushall等

有人能解释一下吗?

回答

0

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

2

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

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

应该

{ $pushAll: { events: events }} 
2

你更新的组合和$ pushAll看起来不错的选择。在这里做什么 - 这是用于追加数组到现有阵列。 $ push用于将一个元素添加到数组中。保存将涉及获取现有的事件数组,追加到它,然后保存该文档。

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

1

为了在这种情况下实现'upsert'语义,您需要使用$addToSet。如果要添加一组值,则需要引入$each修饰符。来自蒙戈壳:

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