大家下午好,

我有一个关于向Mongo插入数组的问题 .

我们以下面的数据为例:

[{ 
  name: 'Charlie Brown',
  companies: ['xyz', 'abc'],
  data: {
    City: 'PHOENIX'
  } 
},
{ 
  name: 'Alex Brown',
  companies: ['xyz', 'ghj'],
  data: {
    State: 'GA'
  } 
},
{ 
  name: 'Charlie Brown',
  companies: ['abc', 'yui'],
  data: {
    City: 'FLINT',
    State: 'GA'
  } 
}]

实际记录比3更复杂,更多,但我希望这将充分发挥作用 .

我想将这些记录插入/更新/插入到mongoDB中,其中匹配(更新)不会覆盖属性,而是使用$ addToSet .

最终结果应如下所示:

[{ 
  name: 'Charlie Brown',
  companies: ['xyz', 'abc', 'yui'],
  data: {
    City: ['PHOENIX', 'FLINT'],
    STATE: 'GA'
  } 
},
{ 
  name: 'Alex Brown',
  companies: ['xyz', 'ghj'],
  data: {
    State: 'GA'
  } 
}]

我在为此找出正确的mongo语法时遇到了一些麻烦 . 我知道更新时有一个upsert选项,但是如何提供我想要更新的记录数组,然后更新数组中的各个记录?

我想也许这个想法是从记录中收集一组名字,所以

['Charlie Brown', 'Alex Brown']

然后将该集用作查询字段,

mongo.collection.update({
    ['Charlie Brown', 'Alex Brown'],
    {$addToSet:{companies: ??? what do I put here??}},
    {upsert: true}
})

将这些记录插入/更新到Mongo的正确语法(或正确的方法,可能使用聚合)是什么?

谢谢!

注意:这个问题与Bulk upsert in MongoDB using mongoose有相似之处,但这里的关键还是使用修饰符$ addToSet . 另外,那些解决方案将数据库操作放在一个循环中,这与mongo一样正常吗?