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

标签 mongodb go mongodb-query mongo-go

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

最佳答案

连接到服务器是这样的:

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喜欢:

coll := client.Database("baz").Collection("inventory")

然后您可以使用 Collection.Find() 执行查询喜欢:

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!

使用 mongo.Cursor 读取结果:

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

注意:我使用了单个 bson.Document读取所有文档的值,并使用其 Document.Reset()在每次迭代开始时清除它并“准备”它以将新文档读入其中。如果你想存储文档(例如在一个 slice 中),那么你显然不能这样做。在这种情况下,只需在每次迭代中创建一个新文档,如 doc := bson.NewDocument()

关于mongodb - 如何使用 mongodb 官方驱动程序使用比较运算符构建查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51314493/

相关文章:

mongodb - $lookup 与 php mongodb

java - Spring Data mongoTemplate.save() 行为

json - RethinkDB 在根据 rfc6902 部分更新 json 文档时有用吗?

go - 如何使用golang编辑云存储桶中对象的元数据信息

javascript - 返回特定的mongodb嵌入文档

python - 使用 pymongo 读取和更新 mongodb 文档的最佳方法

mongodb - 无法将Mongodb连接到docker中的Springboot容器

php - 在 MongoDB PHP 驱动程序和相关 PHPLib 库中使用skip()和limit()实现简单分页时出错

go - 如何在Go中获取socket.io握手查询

angular - 如何从 Go HTTP Server 为 Angular 应用程序提供服务?