标签: mongo-go

如何在官方 MongoDB Go 驱动程序上查找和比较日期?

我是 mongodb-go-driver 的新手,我被卡住了。

我在结构中有一个日期,例如:

type Email struct {
    Date        string            `json:"date"`
}
Run Code Online (Sandbox Code Playgroud)

我的 mongoDB 上并映射到我的结构中的日期具有类似“02/10/2018 11:55:20”的值。

我想在我的数据库上找到日期在另一个日期之后的元素,我正在尝试这个,但响应始终为空。

initDate, _ := time.Parse("02012006", initialDate)
cursor, err := emails.Find(context.Background(), bson.NewDocument(bson.EC.SubDocumentFromElements("date", bson.EC.DateTime("$gt", initDate.Unix()))))
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

go mongodb mongo-go

2
推荐指数
1
解决办法
3685
查看次数

如何使用 mongo-go-driver 0.2.0 在 bson.A 中使用切片的元素

如何使用给定的切片生成 bson.A?我需要这个来进行动态查询。

我正在从 mongo-go-driver alpha 升级到 beta 0.2.0,这已经成为我项目中的一个重大变化,因为现在 API 不同了。

https://godoc.org/github.com/mongodb/mongo-go-driver/bson

input := []string{"bar", "world"}
//expected output
bson.A{"bar", "world"}
Run Code Online (Sandbox Code Playgroud)

go mongo-go

2
推荐指数
1
解决办法
9432
查看次数

在 Mongo-go-driver 中创建一个独特的领域

我对 Go 和 Mongodb 都很陌生,正在用 Go 和 Mongo 编写我的第一个 rest-api。我正在使用mongo-go-driverModal在 Go 中有以下结构

type Modal struct {
    Group     []string           `bson:"group" json:"group"`
    Hostname  string             `bson:"hostname" json:"hostname"`
    Overrides map[string]string  `bson:"overrides" json:"overrides"`
    Excludes  []string           `bson:"excludes" json:"excludes"`
}
Run Code Online (Sandbox Code Playgroud)

我不想使用ObjectIdmongo-db 提供的默认字段作为我的主键,而是希望将该Hostname字段作为主键。

如果我将Hostname字段的类型设置为primitive.ObjectID,那么hostname它将是唯一的,但它的值将由 mongodb 随机生成的字符串而不是实际的主机名字符串值。

那么有没有办法做到这一点。

go mongodb bson mongo-go

2
推荐指数
1
解决办法
4742
查看次数

MongoDB 在 Go 中列出具有给定前缀的数据库

如何仅列出具有给定前缀 ( prefix_) 的数据库?

例子:

package main

import (
  "context"
  "fmt"
  "go.mongodb.org/mongo-driver/bson"
  "go.mongodb.org/mongo-driver/mongo"
  "go.mongodb.org/mongo-driver/mongo/options"
  "log"
)

type foo struct {
  Value string
}

func main() {
  clientOptions := options.Client().ApplyURI("mongodb://10.0.12.76:27018")
  client, err := mongo.Connect(context.TODO(), clientOptions)
  if err != nil {
    log.Fatal(err)
  }
  db := [3]string{"prefix_foo", "prefix_bar", "bar"}

  for _, element := range db {
    _, err := client.Database(element).Collection("placeholder").InsertOne(context.TODO(), foo{"sth"})
    if err != nil {
      log.Fatal(err)
    }
  }

  filter := bson.D{{}}

  dbs, err := client.ListDatabaseNames(context.TODO(), filter)
  if err != nil …
Run Code Online (Sandbox Code Playgroud)

go mongodb mongo-go

2
推荐指数
1
解决办法
1512
查看次数

如何在官方 Go MongoDB 驱动程序中使用逻辑查询选择器($or)执行 FindOne()?

我是 mongo 的初学者。我正在尝试查找匹配"username"email将匹配的文档。但是想不出实现这个条件过滤的方法。

这是我的文档模型:

type User struct {
    Username  string    `json:"username" bson:"username"`
    Email     string    `json:"email" bson:"email"`
    Password  string    `json:"password" bson:"password"`
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
    UpdatedAt time.Time `json:"updated_at" bson:"updated_at"`
}
Run Code Online (Sandbox Code Playgroud)

和查询:

filter := bson.D{
   {"username", user.Username},
   {"$or": {"email", user.Email}},
}

err = userCollection.FindOne(context.TODO(), filter).Decode(&user)
Run Code Online (Sandbox Code Playgroud)

go mongodb mongo-go

2
推荐指数
1
解决办法
70
查看次数

Mongodb 不会使用游标检索具有 200 万条记录的集合中的所有文档

我有 2,000,000 条记录的集合

> db.events.count();                                     ?
2000000             
Run Code Online (Sandbox Code Playgroud)

我使用 golang mongodb 客户端连接到数据库

> db.events.count();                                     ?
2000000             
Run Code Online (Sandbox Code Playgroud)

但是该程序仅检索大约 600,000 条记录,而不是每次我运行该程序时检索 2,000,000 条记录。

$ go run main.go
done
count = 605426
nErrors = 0
2020/09/18 11:23:43 End:         retrive db from mongo and publish to kafka took 10.080603336s
Run Code Online (Sandbox Code Playgroud)

我不知道为什么?我想检索所有 2,000,000 条记录。谢谢你的帮助。

go mongodb mongo-go

2
推荐指数
1
解决办法
253
查看次数

如何在 mongo-go-driver 中使用 ParseExtJSONArray() 解析聚合管道中的扩展 JSON 日期

我有一个带有日期字段的集合:

{
    "_id" : ObjectId("5b92b359ddceef5b24502834"),
    "dateTimeGMT" : ISODate("2018-08-22T09:29:25.000Z"),
    yada, yada, yada
}
Run Code Online (Sandbox Code Playgroud)

我试图使用 mongo-go-driver 的 ParseExtJSONArray 函数在 $match 聚合阶段按日期查找。(我知道如何直接使用 *bson.Array 执行此操作。我问是为了知道使用 ParserExtJSONArray 执行此操作的正确方法,或者如果我遇到了限制。)

我已简化此示例并确认它与上述文档不匹配。

pipeline, err := bson.ParseExtJSONArray(`[
    { "$match": { "dateTimeGMT.$date":"2018-08-22T09:29:25.000Z" } }
]`)
cursor, err := receivedFromResponseQueue.Aggregate(ctx, pipeline)
Run Code Online (Sandbox Code Playgroud)

以下内容在 mongo shell 中不起作用。(这并不奇怪,因为它会自动转换为 ISODate() 格式)

db.getCollection('received_from_response_queue').aggregate([
    { "$match": { "dateTimeGMT.$date":"2018-08-22T09:29:25.000Z" } }
])
Run Code Online (Sandbox Code Playgroud)

但这在 mongo shell 中确实有效。

db.getCollection('received_from_response_queue').aggregate([
    { "$match": { "dateTimeGMT": ISODate("2018-08-22T09:29:25.000Z") } }
])
Run Code Online (Sandbox Code Playgroud)

但这会在“pipeline”中返回一个空数组。(因为 ParseExtJSONArray 不处理 JavaScript)

pipeline, err := bson.ParseExtJSONArray(`[
    { "$match": { "dateTimeGMT":ISODate("2018-08-22T09:29:25.000Z") } …
Run Code Online (Sandbox Code Playgroud)

go mongodb aggregation-framework mongo-go

1
推荐指数
1
解决办法
2256
查看次数

复合文字 go 中缺少类型并且映射文字 go 中缺少键

我正在尝试使用 MongoDB 进行分页

我写这段代码:

findOptions := options.Find()
    findOptions.SetLimit(20)
    findOptions.SetSort(bson.M{{"_id", 1}})

    cursor, err34 := collection.Find(context.Background(), bson.M{{"_id", bson.M{{"$gte", last_id}}}}, findOptions)
Run Code Online (Sandbox Code Playgroud)

现在它不断抱怨:

复合文字 go 中缺少类型并且映射文字 go 中缺少键

它抱怨这部分:

findOptions.SetSort(bson.M{{"_id", 1}})
Run Code Online (Sandbox Code Playgroud)

bson.M{{"_id", bson.M{{"$gte", last_id}}}}, findOptions)
Run Code Online (Sandbox Code Playgroud)

我已经被这个错误困扰了好几个小时了,这非常令人沮丧。

请帮忙 :(

dictionary go mongodb mongo-go

1
推荐指数
1
解决办法
1748
查看次数

goroutine创建多个mongodb连接

如何在golang中管理超过100000个goroutine的MongoDB连接。

我创建了一个*mongo.Client实例,然后使用同一个客户端,但它创建了多个连接。

go mongodb mongo-go

1
推荐指数
1
解决办法
1225
查看次数

mongodb客户端驱动并发安全吗?

在以下代码库中的代码中,创建了 mongodb 客户端(如下所示):

import (
    "context"
    "time"

    "go.mongodb.org/mongo-driver/mongo"
    "go.mongodb.org/mongo-driver/mongo/options"
    "go.mongodb.org/mongo-driver/mongo/readpref"
)

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
Run Code Online (Sandbox Code Playgroud)

在我们的场景中:

Goroutine 1 用于collection1读写操作:

  collection1 := client.Database("testing").Collection("collectionone")
Run Code Online (Sandbox Code Playgroud)

Go-routine 2 同时使用collection1&collection2进行读写操作:

 collection2 := client.Database("testing").Collection("collectiontwo")
Run Code Online (Sandbox Code Playgroud)

client在多个 go 例程中使用并发安全吗?

database go mongodb goroutine mongo-go

1
推荐指数
1
解决办法
779
查看次数