如何向MongoDB中插入不重复的数据?

我现在的做法是:

c := database.C(collection_name)
count, _ := c.Find(bson.M{"mobile": mobile_num}).Count()
if count > 0 {
   // do nothing
 } else {
   c.Insert(bson.M{"mobile": mobile_num})
 }

虽然可以实现功能,但这种方法实在是太笨,有没有更好的方法?

共 5 个回复


kagilo

唯一索引。。

# 0

qkevin123

问题是在insert这条数据之前,我并不知到 _id 的值。

而且,实际项目中我需要insert的数据,并不包含 _id。

每一条数据包含三项内容,比如:mobile_num, name, time. 这三项数据组合在一起不能有重复的数据,但是单独的一项,比如mobile_num可能会有很多重复。

# 1

perki

一楼正解!

# 2

jimmykuu

这种实现并不笨,不用把问题复杂化了。

  1. 这种插入并不会很频繁,插入之前检查一下并不会有多大开销;
  2. 查询的地方可以优化一下,加个Limit(1);

当然用1楼的唯一索引也可以,这样如果有重复值插入就报错了。

# 3

qkevin123

thanks very much.

# 4