mongoimport + точечная нотация, обновление слияния подзаписей с CSV
Допустим, у меня есть запись
{
_id: 100,
foo: {
bar: 0,
baz: 1
}
}
и я хочу обновить его с mongoimport с CSV
_id,foo.kek
100,9000
Тем не мение,
mongoimport --type csv --file myfile.csv --headerline --mode merge
полностью переписал бы объект sub-BSON foo:
{
_id: 100,
foo: {
kek: 9000
}
}
Есть ли способ сделать частичное обновление
{
_id: 100,
foo: {
bar: 0,
baz: 1,
kek: 9000
}
}
с монгоимпортом? Есть ли другой эффективный способ сделать это (у меня есть миллионы записей)?
Версия сервера MongoDB: 3.0.14
версия mongoimport: r3.4.2
Заранее спасибо!
1 ответ
Решение
С моноимпортом это невозможно.
--mode merge
$set
весь документ:
_, err = up.collection.Upsert(selector, bson.M{"$set": document})
Самый простой способ - это исправить код, чтобы он соответствовал вашим потребностям, если у вас настроен golang. В противном случае вы можете импортировать файл во временную коллекцию и объединить его на любом языке или написать собственную утилиту импорта.