我需要使用比较运算符构建查询,相当于使用official driver的db.inventory.find( { qty: { $gt: 20 }
。知道怎么做吗?
答案 0 :(得分:0)
连接到服务器类似于:
Error: UPGRADE FAILED: Service "haproxy" is invalid: spec.ports[0].nodePort: Invalid value: 80:
然后像这样获得client, err := mongo.NewClient("mongodb://foo:bar@localhost:27017")
if err != nil { log.Fatal(err) }
err = client.Connect(context.TODO())
if err != nil { log.Fatal(err) }
mongo.Collection
:
inventory
然后,您可以使用Collection.Find()
来执行查询,例如:
coll := client.Database("baz").Collection("inventory")
使用mongo.Cursor
读取结果:
ctx := context.Background()
cursor, err := coll.Find(ctx,
bson.NewDocument(
bson.EC.SubDocumentFromElements("qty",
bson.EC.Int32("$gt", 20),
),
),
)
defer cursor.Close(ctx) // Make sure you close the cursor!
注意:我使用单个bson.Document
值读取所有文档,并在每次迭代的开始使用其Document.Reset()
清除它并“准备”它以将新文档读入其中。如果要存储文档(例如,切片),则显然不能这样做。在这种情况下,只需在每次迭代中创建一个新文档,例如doc := bson.NewDocument()
for cursor.Next(ctx) {
doc.Reset()
if err := cursor.Decode(doc); err != nil {
// Handle error
log.Printf("cursor.Decode failed: %v", err)
return
}
// Do something with doc:
log.Printf("Result: %v", doc)
}
if err := cursor.Err(); err != nil {
log.Printf("cursor.Err: %v", err)
}
。