如何使用mongodb官方驱动程序使用比较运算符构建查询?

时间:2018-07-12 21:08:58

标签: mongodb go mongodb-query mongo-go

我需要使用比较运算符构建查询,相当于使用official driverdb.inventory.find( { qty: { $gt: 20 }。知道怎么做吗?

1 个答案:

答案 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) }