2014-10-29 09:48



I have a collection named 'myplace'. It has the following fields: place_name, latitude, longitude, city, country.

I want all the cities that start with the letter "A". I tried the following:

type Place struct{
    City string `bson: "City"`

For retrieving the result from the db:

var city_name []Place
err = coll.Find(bson.M{"city": bson.M{"$regex":"^a", "$options":"si"}}).All(&city_name)

It's getting all the results. The problem is that some of the 'myplace' documents have the same city, so it's returning duplicate city names.

Let's say I have 5 myplaces, 3 with the city name "Baton Rouge" and remaining having "Trivandrum, Kochi". When I try to get the city starting with "B", it's returning "Baton Rouge" 3 times.

How can I ensure each city_name is unique?

Thanks in advance

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答


  • dou2347 dou2347 7年前

    You can use the Distinct method, in the shell it will look like :

    db.foo.distinct( "city",  { "city" : { "$regex" : /^A/i    } }  );

    In Go:

     var result []string 
     err = c.Find( bson.M{"city": bson.M{"$regex":"^a","$options":"si"}}  ).Distinct("city", &result) 
     if err != nil {
     fmt.Println( result )
    点赞 评论 复制链接分享
  • dsgdhtr_43654 dsgdhtr_43654 7年前

    You can use Distinct:

    err = coll.Find(bson.M{"city": bson.M{"$regex":"^a", "$options":"si"}}).Distinct("city", &city_name)

    ..this assumes that city_name is actually a slice.

    点赞 评论 复制链接分享