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

时间:2017-11-24 09:37:03

标签: mongodb go mgo

我是用语言工作的。我使用mgo驱动程序从mongodb获取数据。我想从事件数组中输入最后一个条目。

将来会有大量数据。所以我不想阅读整个记录,只是想要记录中的特定数据。

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

1 个答案:

答案 0 :(得分:1)

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

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

因此,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)