在向mongodb写入数据时,我们正在检查数据是否存在获取_id并使用save更新,否则使用insert添加数据。如果在查询中提供_id,则读取保存是最好的方法,而保存它将根据数据库中是否存在_id来更新/插入。保存是最好的方法还是有其他方法。
答案 0 :(得分:2)
来自文档
根据文档参数更新现有文档或插入新文档。
将一个或多个文档插入集合中。
如果您在案例中使用db.collection.insert()
,则会出现重复键错误,因为它会尝试插入与现有文档具有相同_id
的新文档。但是,您应该使用update
方法而不是save
。
答案 1 :(得分:2)
如果您要保存所有可用数据,请每次只运行update()
,但使用upsert
功能。只需要一个查询:
db.collection.update(
['_id' => $id],
$data,
['upsert' => true]
);
如果您的_id
是由mongo生成的,那么您始终知道数据库中有记录,update
是要使用的记录,但您可以再次save()
。
如果您生成了自己的ID(因此不知道它是否来自该集合),则无需运行额外查询即可继续使用。