mongodb - 如何使用golang获取mongodb中数组中的最后一个元素?

标签 mongodb go mgo

我正在使用 go 语言。我正在使用 mgo 驱动程序从 mongodb 获取数据。我想要事件数组中的最后一个条目。

future 会有海量数据。所以我不想阅读整个记录,而只想从记录中获取特定数据。

db.events.find({"_id":"59ce53b9-970a-44a2-8419-b41a99120b25"},{"events":{$slice:-1}}).pretty()

这在 mongo shell 中工作。我希望它能在 go lang 中工作。

这是样本数据,我希望事件中出现最后一个条目。

    {
    "_id" : "59ce53b9-970a-44a2-8419-b41a99120b25",
    "version" : 9,
    "events" : [
        {
            "event_type" : "customer:added",
            "data" : {
                "id" : "59ce53b9-970a-44a2-8419-b41a99120b25",
                "name" : "arjun"
            },
            "timestamp" : ISODate("2017-11-20T12:21:34.910Z"),
            "aggregate_type" : "customer",
            "_id" : "59ce53b9-970a-44a2-8419-b41a99120b25",
            "version" : 1
        },
        {
            "event_type" : "customer:address-updated",
            "data" : {
                "id" : "59ce53b9-970a-44a2-8419-b41a99120b25",
                "address" : "bangalore"
            },
            "timestamp" : ISODate("2017-11-20T12:22:08.496Z"),
            "aggregate_type" : "customer",
            "_id" : "59ce53b9-970a-44a2-8419-b41a99120b25",
            "version" : 2
        }
    ]
}

最佳答案

您将作为第二个参数传递给 find() 的内容是 projection .

mgo 中的投影可以使用 Query.Select() 指定方法。

所以您在 mgo 中的查询看起来像这样:

sess := ... // Acquire MongoDB session
c := sess.DB("dbname").C("events")

var doc bson.M

err := c.FindId("59ce53b9-970a-44a2-8419-b41a99120b25").
    Select(bson.M{"events": bson.M{"$slice": -1}}).
    One(&doc)

if err != nil {
    // Handle error
}
fmt.Println(len(doc["events"].([]interface{}))) // This prints 1
fmt.Println(doc)

关于mongodb - 如何使用golang获取mongodb中数组中的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470278/

相关文章:

MongoDB killOp() 没有终止操作。我该怎么办?

php - 来自 php 的 Mongodb 查询 - 无法使其正常工作

node.js - Mongoose : sort by math and search by multiple values in string array

error-handling - Go 中更简洁的错误处理

mongodb - 使用 mgo.txn 模拟更新插入

go - 来自 Go 的不区分大小写的 MongoDB 查询

arrays - 如何在 meteor 发布函数中设置嵌套数组值?

go - 整数映射 -> Go 中的 2d slice

通过 Go 应用程序调用的 IIS appcmd - 无效的 XML 输入

mongodb - 在文档 mongodb mgo 驱动程序中增加嵌套数组的特定值