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})

https://github.com/mongodb/mongo-tools/blob/cb82c3f9336da19b9cafabf7f57e5e5b0e875338/mongoimport/mongoimport.go#L544

Самый простой способ - это исправить код, чтобы он соответствовал вашим потребностям, если у вас настроен golang. В противном случае вы можете импортировать файл во временную коллекцию и объединить его на любом языке или написать собственную утилиту импорта.

Другие вопросы по тегам