golang MongoDB的使用
MongoDB项目中涉及到的,先记录下,后面有新的内容再补充库"go.mongodb.org/mongo-driver"ObjectIDMongoDB中经常会接触到一个自动生成的字段:”_id”,类型为ObjectId。MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的 BSON类型字符串。例:6273 f481 4ca1 7097 3448 131f(
·
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数组。E
:D
中的单个元素。
更多推荐
已为社区贡献1条内容
所有评论(0)