更复杂的查询一时也想不到什么场合用得着,所以以后有了再慢慢补充。
and 和or组合:
// 展示复杂的and和or关系组合查询
func AdvanceAndOr(mongo *mongo.Database, ctx context.Context) {
// 平时我们的条件都是具有隐式的and关系,但是因为同时需要使用两次$or,所以就需要显示使用and
filter := bson.M{"$and": bson.A{bson.M{"$or": bson.A{bson.M{"int32": math.MaxInt32}, bson.M{"int32": math.MaxInt32 - 1}}}, bson.M{"$or": bson.A{bson.M{"boolean": true}, bson.M{"boolean": false}}}}}
// 查询数据,并解析成结构体
cur, _ := mongo.Collection("test").Find(ctx, filter)
// 遍历数据
for cur.TryNext(ctx) {
result, _ := cur.Current.Elements()
fmt.Println(result)
}
cur.Close(ctx)
}
我认为复杂的查询往往是组合各种关键字进行查询,所以,下面将一些还未实践过的关键字给列出来,方便以后查询。
关键字 | 解释 | 链接 |
---|---|---|
ne | 不等于 | 链接 |
not | 反转结果,除了匹配条件以外的所有文档 | 链接 |
nor | 返回每个条件都不匹配或者就没有该字段的文档,和上面这个很像,但是有区别 | 链接 |
exists | 具有指定字段的文档 | 链接 |
type | 匹配字段类型 | 链接 |
expr | 聚合表达式,功能很强大,很复杂 | 链接 |
jsonSchema | 文档校验规则,文档的数据本身没有限制,用这个可以限制 | 链接 |
mod | 求模,用余数做查询条件 | 链接 |
regex | 正则表达式匹配 | 链接 |
text文本搜索,但是需要建立索引,不实际 | 链接 |