$push 字符串作为 mongo 文档中的数组
$push string as an array in mongo document
我在理解 Go 中的数组时遇到问题,尤其是在使用 graphql 和 mongo 时。使用 JS,这一切对我来说都是轻而易举的事,但我想知道你是否可以看看我所拥有的并指出显而易见的地方!
我正在寻找形状如下的对象:
time
├── login
│ ├── 0
│ │ └── "2021-08-16T20:11:54-07:00"
│ ├── 1
│ │ └── "2021-08-16T20:11:54-07:00"
│ └── 2
└── "2021-08-16T20:11:54-07:00"
models.go:
type Time struct {
Login []string
}
type User struct {
ID graphql.ID
Time Time
}
schema.graphql:
type Time {
login: [String!]!
}
type User {
id: ID!
time: Time!
}
database.go:
filter := bson.D{{Key: "email", Value: email}}
arr := [1]string{time.Now().Format(time.RFC3339)}
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: arr},
}},
}
result, err := collection.UpdateOne(ctx, filter, update)
我也试过:
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: time.Now().Format(time.RFC3339)},
}},
}
result, err := collection.UpdateOne(ctx, filter, update)
但总是以同样的错误结束:
error="write exception: write errors: [The field 'time.login' must be an array but is of type null in document {_id: ObjectId('611b28fabffe7f3694bc86dc')}]"
[1]string{}
是一个数组。 []string{}
是一个切片。两者不同。数组是固定大小的对象。切片可以 grow/shrink 动态。
在这种情况下,您不应该使用任何一个,因为 $push
得到的是一个值,而不是切片:
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: time.Now().Format(time.RFC3339)},
}},
}
尝试初始化切片。
并使用 append.
我在理解 Go 中的数组时遇到问题,尤其是在使用 graphql 和 mongo 时。使用 JS,这一切对我来说都是轻而易举的事,但我想知道你是否可以看看我所拥有的并指出显而易见的地方!
我正在寻找形状如下的对象:
time
├── login
│ ├── 0
│ │ └── "2021-08-16T20:11:54-07:00"
│ ├── 1
│ │ └── "2021-08-16T20:11:54-07:00"
│ └── 2
└── "2021-08-16T20:11:54-07:00"
models.go:
type Time struct {
Login []string
}
type User struct {
ID graphql.ID
Time Time
}
schema.graphql:
type Time {
login: [String!]!
}
type User {
id: ID!
time: Time!
}
database.go:
filter := bson.D{{Key: "email", Value: email}}
arr := [1]string{time.Now().Format(time.RFC3339)}
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: arr},
}},
}
result, err := collection.UpdateOne(ctx, filter, update)
我也试过:
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: time.Now().Format(time.RFC3339)},
}},
}
result, err := collection.UpdateOne(ctx, filter, update)
但总是以同样的错误结束:
error="write exception: write errors: [The field 'time.login' must be an array but is of type null in document {_id: ObjectId('611b28fabffe7f3694bc86dc')}]"
[1]string{}
是一个数组。 []string{}
是一个切片。两者不同。数组是固定大小的对象。切片可以 grow/shrink 动态。
在这种情况下,您不应该使用任何一个,因为 $push
得到的是一个值,而不是切片:
update := bson.D{
{Key: "$push", Value: bson.D{
{Key: "time.login", Value: time.Now().Format(time.RFC3339)},
}},
}
尝试初始化切片。 并使用 append.