如何将文件导入MongoDB时合并文档

发布于

当您使用将文件导入MongoDB时,您可以选择将现有文档与要导入的文档合并。mongoimport

在这种情况下,如果导入的文档与要导入到的集合中的现有文档具有相同的值,则现有文档将与要导入的文档合并。_id

如果需要,您还可以指定另一个字段(字段除外)作为匹配字段。_id

合并文档时,生成的文档会将现有数据与导入文件中的任何新数据合并。任何相同的数据都将保持不变。任何冲突的数据都将导致导入文件的数据覆盖现有数据。如果导入的文档不包含MongoDB集合中相应文档中的字段,则该字段将在集合中保持不变(即不会删除或更改)。

合并文档的方法是使用模式。mongoimport``merge

例

假设我们有一个名为 pets 的集合,其中包含以下文档:

db.pets.find()

结果:

{ “_id” : 1, “name” : “Wag”, “type” : “Dog” } { “_id” : 2, “name” : “Bark”, “type” : “Dog” } { “_id” : 3, “name” : “Meow”, “type” : “Cat” }

我们有以下JSON文件,称为:pets.json

{"_id":2.0,“name”:“Fetch”,“type”:“Dog”,“weight”:40.0} {"_id":3.0,“weight”:10.0} {"_id":4.0,“name”:“Hop”,“type”:“Kangaroo”,“weight”:60.0}

以下命令将 JSON 文件导入集合:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json

这将使用模式将匹配的文档与导入的文档合并。merge

检查结果

现在让我们来看看这个系列。

db.pets.find()

结果:

{ “_id” : 1, “name” : “Wag”, “type” : “Dog” } { “_id” : 2, “name” : “Fetch”, “type” : “Dog”, “weight” : 40 } { “_id” : 3, “name” : “Meow”, “type” : “Cat”, “weight” : 10 } { “_id” : 4, “name” : “Hop”, “type” : “Kangaroo”, “weight” : 60 }

我们可以看到文档 1 没有变化,文档 2 的名称字段已更改为 ,并且还添加了字段。文档 3 还添加了权重字段,并插入了文档 4。Fetch``weight

更改更新插入字段

您可以使用该参数指定字段,而不是匹配字段。使用此参数时,将字段作为逗号分隔的列表传递。--upsertFields``_id

假设我们有另一个要导入的 JSON 文件,它看起来像这样:pets2.json

{“name”:“Wag”,“type”:“Dog”,“weight”:20.0,“gooddog”:true} {“name”:“Bubbles”,“type”:“Fish”}

此文档不包括该字段,因此我们需要与唯一标识每个文档的其他字段进行匹配。在这种情况下,我们可以使用 and 字段。_id``name``type

因此,我们可以使用以下命令:mongoimport

mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json

现在让我们再次检查集合:

db.pets.find()

结果:

{ “_id” : 1, “name” : “Wag”, “type” : “Dog”, “gooddog” : true, “weight” : 20 } { “_id” : 2, “name” : “Fetch”, “type” : “Dog”, “weight” : 40 } { “_id” : 3, “name” : “Meow”, “type” : “Cat”, “weight” : 10 } { “_id” : 4, “name” : “Hop”, “type” : “Kangaroo”, “weight” : 60 } { “_id” : ObjectId(“5ff0548dd991410169412300”), “name” : “Bubbles”, “type” : “Fish” }

我们可以看到 Wag 已更新(但值保持不变)。_id

另一方面,气泡与更新插入字段不匹配,因此入。

检查mongoimport

mongoimport是 MongoDB 数据库工具包的一部分。MongoDB数据库工具是一套用于使用MongoDB的命令行实用程序。

如果您不确定是否安装了MongoDB数据库工具/,请尝试在终端或命令提示符下运行以下命令进行检查:mongoimport

mongoimport --version

如果有,您应该会看到版本信息等。如果您没有它,您可以使用MongoDB网站上的安装说明将其安装到您的系统上。

在哪里运行命令?

不要忘记,您需要从系统的命令行(例如新的终端或命令提示符窗口)运行命令。mongoimport

不要从 shell 运行它们。mongo