一、想法
想实现某个集合中的插入文档的操作,但是插入文档的时候想先知道这个集合中是否已存在该文档,若不存在则新增,若存在则不新增;
二、思路
其实实现这个想法的思路有两种:
(1)先使用db.collection.count()查询是否存在该文档,若存在则不insert,若不存在则insert,但是这个过程涉及到两个过程,执行了两条语句,时间上会比较耗时;
(2)使用update()方法,update()里面有有个参数叫$setOnInsert和upsert,其功能就是对于已存在的则不执行操作。这个已存在的可以是字段,也可以是整条文档,这个取决于你传入的字段是文档里面的字段是否是整个文档还是只是文档里面的局部字段;
三、实现
现在创建一个goods表,往里面添加学生。
db.goods.update({"my_id":"1","my_status":"学生"},{$setOnInsert:{"my_id":"1","my_status":"学生"}},{upsert:true})
执行结果:
第1次:
第2次~第n次,并使用find查看现有数据,可以看到已存在的学生不会重新增加。
完毕。