大家下午好,
我有一个关于向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一样正常吗?