mongoimport +点表示法,使用CSV进行子记录合并更新

问题描述 投票:0回答:1

假设我有一个记录

{
    _id: 100,
    foo: {
        bar: 0,
        baz: 1
    }
}

我想用mongoimport用CSV更新它

_id,foo.kek
100,9000

然而,

mongoimport --type csv --file myfile.csv  --headerline  --mode merge

会完全重写子BSON对象foo:

{
    _id: 100,
    foo: {
        kek: 9000
    }
}

有没有办法进行部分更新

{
    _id: 100,
    foo: {
        bar: 0,
        baz: 1,
        kek: 9000
    }
}

与mongoimport?有没有其他有效的方法(我有数百万条记录)?

MongoDB服务器版本:3.0.14

mongoimport版本:r3.4.2

提前致谢!

mongodb csv mongoimport
1个回答
2
投票

mongoimport是不可能的。

--mode merge $sets整个文件:

_, err = up.collection.Upsert(selector, bson.M{"$set": document})

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

最简单的方法是修补代码,以便在设置golang时定制您的需求。否则,您可以将文件导入临时集合并使用您选择的语言将其合并,或者编写自己的导入实用程序。

© www.soinside.com 2019 - 2024. All rights reserved.