$push字符串作为 mongo 文档中的数组

我在理解 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"

模型.go:


type Time struct {

    Login []string

}


type User struct {

    ID       graphql.ID

    Time     Time

}

模式.graphql:


type Time {

  login: [String!]!

}


type User {

  id:      ID!

  time:    Time!

}

数据库.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')}]"


交互式爱情
浏览 76回答 1
1回答

冉冉说

[1]string{}是一个数组。 是一个切片。两者是不同的。数组是固定大小的对象。切片可以动态增大/缩小。[]string{}在这种情况下,您也不应该使用,因为获取一个值,而不是一个切片:$pushupdate := bson.D{  {Key: "$push", Value: bson.D{    {Key: "time.login", Value: time.Now().Format(time.RFC3339)},  }},}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go