如何将文件导入MongoDB时替换现有文档

发布于

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

我的意思是,如果导入的文档与您要导入的集合中的现有文档具有相同的值,则现有文档将被正在导入的文档替换。_id

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

使用时替换现有文档的方法是使用模式。mongoimport``upsert

例

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

db.pets.find()

结果:

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

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

{"_id":2,“name”:“Fetch”,“type”:“Dog”} {"_id":3,“name”:“Scratch”,“type”:“Cat”,“weight”:10} {"_id":4,“name”:“Hop”,“type”:“Kangaroo”,“weight”:60}

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

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

这将使用模式将匹配的文档替换为导入的文档。upsert

检查结果

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

db.pets.find()

结果:

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

我们可以看到文档 2 已被完全替换。狗已被替换为狗,并且没有记录体重。Bark``Fetch``Fetch

文档 3 也被替换,文档 4 完全是一份全新的文档。

更改更新插入字段

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

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

{“name”:“Fetch”,“type”:“Dog”,“weight”:20,“gooddog”:true} {“name”:“Scratch”,“type”:“Cat”,“weight”:15} {“name”:“Bubbles”,“type”:“Fish”}

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

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

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

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

db.pets.find()

结果:

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

我们可以看到 Fetch 已被更新/替换(但值保持不变)。与 Scratch 相同。_id

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

检查mongoimport

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

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

mongoimport --version

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

在哪里运行命令?

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

不要从 shell 运行它们。mongo