我是 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)
我究竟做错了什么?
如何使用给定的切片生成 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 和 Mongodb 都很陌生,正在用 Go 和 Mongo 编写我的第一个 rest-api。我正在使用mongo-go-driver
并Modal
在 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)
我不想使用ObjectId
mongo-db 提供的默认字段作为我的主键,而是希望将该Hostname
字段作为主键。
如果我将Hostname
字段的类型设置为primitive.ObjectID
,那么hostname
它将是唯一的,但它的值将由 mongodb 随机生成的字符串而不是实际的主机名字符串值。
那么有没有办法做到这一点。
如何仅列出具有给定前缀 ( 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) 我是 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) 我有 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 条记录。谢谢你的帮助。
我有一个带有日期字段的集合:
{
"_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) 我正在尝试使用 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)
我已经被这个错误困扰了好几个小时了,这非常令人沮丧。
请帮忙 :(
如何在golang中管理超过100000个goroutine的MongoDB连接。
我创建了一个*mongo.Client
实例,然后使用同一个客户端,但它创建了多个连接。
在以下代码库中的代码中,创建了 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 例程中使用并发安全吗?