Mongo:投影不影响布尔值
Mongo: projection not affecting booleans
我注意到我可以将投影设置为不是 return 我的 username
或 userID
字符串而不会出现问题。但是,当尝试不 return deactivated
或 admin
布尔值时,即使其他字符串不会出现,它们仍然会出现?
user := model.User{}
filter := bson.D{
{
Key: "_id",
Value: userID,
},
}
projection := bson.D{
{
Key: "password",
Value: 0,
},
{
Key: "username",
Value: 0,
},
{
Key: "_id",
Value: 0,
},
{
Key: "deactivated",
Value: 0,
},
{
Key: "admin",
Value: 0,
},
}
options := options.FindOne().SetProjection(projection)
_ = usersCol.FindOne(ctx, filter, options).Decode(&user)
&{ false false [0xc00028d180] 0xc0002b0900 0xc0002bdce0 <nil>}
type User struct {
ID string `json:"id" bson:"_id"`
Admin bool `json:"admin"`
Deactivated bool `json:"deactivated"`
Username string `json:"username"`
Password string `json:"password"`
...
}
您看到的值是结构字段的默认值。我建议您使用指向 User
:
字段的指针
type User struct {
ID string `json:"id" bson:"_id"`
Admin *bool `json:"admin"`
Deactivated *bool `json:"deactivated"`
Username string `json:"username"`
Password string `json:"password"`
...
}
在此示例中,值为 nil
。
我注意到我可以将投影设置为不是 return 我的 username
或 userID
字符串而不会出现问题。但是,当尝试不 return deactivated
或 admin
布尔值时,即使其他字符串不会出现,它们仍然会出现?
user := model.User{}
filter := bson.D{
{
Key: "_id",
Value: userID,
},
}
projection := bson.D{
{
Key: "password",
Value: 0,
},
{
Key: "username",
Value: 0,
},
{
Key: "_id",
Value: 0,
},
{
Key: "deactivated",
Value: 0,
},
{
Key: "admin",
Value: 0,
},
}
options := options.FindOne().SetProjection(projection)
_ = usersCol.FindOne(ctx, filter, options).Decode(&user)
&{ false false [0xc00028d180] 0xc0002b0900 0xc0002bdce0 <nil>}
type User struct {
ID string `json:"id" bson:"_id"`
Admin bool `json:"admin"`
Deactivated bool `json:"deactivated"`
Username string `json:"username"`
Password string `json:"password"`
...
}
您看到的值是结构字段的默认值。我建议您使用指向 User
:
type User struct {
ID string `json:"id" bson:"_id"`
Admin *bool `json:"admin"`
Deactivated *bool `json:"deactivated"`
Username string `json:"username"`
Password string `json:"password"`
...
}
在此示例中,值为 nil
。