5.6.1 写入文档

5.6.1 写入文档

写入文档可以使用insert或者save命令。

>db.user.insert({"name":"mongo"});

>db.user.save({"name":"mongo"});

上述命令保存文档{"name":"mongo"}到集合user。如果user集合不存在则自动创建。文档应满足BSON格式。

使用save时,如果数据库中已经有这条数据,则会更新它;如果没有则插入。该方法新版本中已废弃,可以使用db.collection.insertOne()或db.collection.replaceOne()来代替。

使用insert时,如果数据库中已有这条数据,则会报错"E11000 duplicate key error collection",如果没有则写入。

数据库是否存在这条记录通过“_id”字段判断,也就是说当save保存文档时,如果文档带有“_id”字段时,会找到集合有这个“_id”的数据,更新该数据成新的文档。

写入文档使用示例如图5-9所示。

图5-9 写入文档使用示例

由于Mongo Shell是JavaScript的客户端,可以在Shell中像使用JavaScript语句一样定义变量。在上面的示例中,定义了变量j为满足BSON格式的文档,使用save()函数插入到user集合中,再使用insert()函数插入时,由于文档已存在,报"E11000 duplicate key error collection"的错误。

有几点需要说明:

①不需要预先创建集合,在第一次插入文档时会自动创建。如图5-9示例中会自动创建user集合。

②在文档中可以存储任何结构的数据,但在实际应用中一般存储的还是相同类型的文档。

③每次插入文档时,集合中会为这个文档生成一个名为“_id”的默认主键字段。这个主键名称是固定的,可以是MongoDB支持的任何数据类型,插入数据时不指定“_id”字段值时,则默认值是ObjectId。