MongoDB

项目中涉及到的,先记录下,后面有新的内容再补充

"go.mongodb.org/mongo-driver"

ObjectID

MongoDB中经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。

MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON类型字符串。
例:

6273 f481 4ca1 7097 3448 131f
(1) 6273 f481(4字节):UNIX时间戳
6273f481(16进制时间戳)→ 1651766401(十进制时间戳)→2022-5-6 0:0:1
(2) 4ca1 70 (3字节):运行MongoDB的机器
(3)97 34(2字节):生成此_id的进程
(4) 48 131f(3字节):由一个随机数开始的计数器生成的值

查询、修改

项目中查询示例

func (*statDao) FindCollectionLimit(collectionName string, size int) ([]bson.M, error) {
   opt := options.Find()
   opt.SetLimit(int64(size))// 定义返回文档数量
   opt.SetSort(bson.D{{"$natural", -1}})// $natural是按数据在磁盘上的组织顺序排序 $id
   query := bson.M{}
   // 注意用于查询的objectid都是primitive.ObjectId类型而不是string类型
   if xxx {
    	query = bson.M{
		"$and":[]bson.M{
			bson.M{"_id":bson.M{"$gt": startobjectid}},
			bson.M{"_id":bson.M{"$lt": endobjectid}},
		},
	  }
   }
   if xxx {
        query = bson.M{
			"_id":objectId,
		}
   }
   cursor, err := pkg.Mongo.Client.Database(pkg.Database).Collection(collectionName).Find(pkg.Mongo.TimeoutContext, query, opt)
   if err != nil {
      return nil, err
   }
   var results []bson.M
   if err = cursor.All(pkg.Mongo.TimeoutContext, &results); err != nil {
      return nil, err
   }
   return results, nil
}

BSON

MongoDB中的JSON文档以称为BSON(二进制编码的JSON)的二进制表示形式存储。

Go Driver有两种系列用于表示BSON数据:D系列类型和Raw系列类型

D类型:

  • D:BSON文档。此类型应用在顺序很重要的场景下,例如MongoDB命令。
  • M:无序map。除不保留顺序外,与D相同。
  • A:一个BSON数组。
  • ED中的单个元素。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐