Skip to content

查询条件 - $nin

函数构建

使用 query 包提供的泛型函数 NIn 构建 $nin 查询条件。

go
// bson.D{bson.E{Key:"status", Value:bson.D{bson.E{Key:"$nin", Value:[]string{"deleted", "archived"}}}}}
result := query.NIn("status", "deleted", "archived")

NIn 的签名支持泛型参数,因此也可以直接传入同一类型的候选值:

go
// bson.D{bson.E{Key:"age", Value:bson.D{bson.E{Key:"$nin", Value:[]int{18, 20, 30}}}}}
result := query.NIn("age", 18, 20, 30)
result = query.NIn("score", 0.0, 59.5)

方法构建(构建器)

使用 query.NewBuilder() 构建 $nin 时,除了通用的 Nin 方法,还提供了多组类型化方法。类型化方法可以让候选值列表保持明确的 Go 类型,适合数值类型比较、避免 any 列表带来的类型不清晰。

当前 Builder 支持:

方法值类型
Ninany
NinFloat32float32
NinFloat64float64
NinIntint
NinInt8int8
NinInt16int16
NinInt32int32
NinInt64int64
NinStringstring
NinUintuint
NinUint8uint8
NinUint16uint16
NinUint32uint32
NinUint64uint64

字符串列表:

go
// bson.D{bson.E{Key:"status", Value:bson.D{bson.E{Key:"$nin", Value:[]string{"deleted", "archived"}}}}}
result := query.NewBuilder().
    NinString("status", "deleted", "archived").
    Build()

整数列表:

go
// bson.D{bson.E{Key:"age", Value:bson.D{bson.E{Key:"$nin", Value:[]int{18, 20, 30}}}}}
result := query.NewBuilder().
    NinInt("age", 18, 20, 30).
    Build()

浮点数列表:

go
// bson.D{bson.E{Key:"score", Value:bson.D{bson.E{Key:"$nin", Value:[]float64{0.0, 59.5}}}}}
result := query.NewBuilder().
    NinFloat64("score", 0.0, 59.5).
    Build()

如果值列表已经是 []any,或者需要传入类型化方法没有覆盖的 BSON 值,可以使用通用 Nin。实际查询时仍建议让候选值与被查询字段保持一致的数据类型,避免因为 BSON 类型比较规则或 null 的匹配语义带来非预期结果。

go
// bson.D{bson.E{Key:"status", Value:bson.D{bson.E{Key:"$nin", Value:[]any{"deleted", "archived"}}}}}
values := []any{"deleted", "archived"}

result := query.NewBuilder().
    Nin("status", values...).
    Build()