Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用golang获取mongodb中数组中的最后一个元素?_Mongodb_Go_Mgo - Fatal编程技术网

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

如何使用golang获取mongodb中数组中的最后一个元素?,mongodb,go,mgo,Mongodb,Go,Mgo,我在用围棋语言工作。我正在使用mgo驱动程序从mongodb获取数据。我想要事件数组中的最后一个条目 未来将会有大量的数据。所以我不想读取整个记录,只想从记录中读取特定的数据 db.events.find({"_id":"59ce53b9-970a-44a2-8419-b41a99120b25"},{"events":{$slice:-1}}).pretty() 这是在mongo shell中工作的。我希望这在go lang中起作用 这是示例数据,我希望最后一个条目出现在事件中 {

我在用围棋语言工作。我正在使用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
        }
    ]
}

作为第二个参数传递给的是一个

可以使用该方法指定
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)

这我不知道ISODate()语法是什么,所以它只是被包装成一个字符串,它是时间戳。使用了golang()的时间包。并使用bson封送结构。谢谢。。成功了。我做了一些改进,比如
Select(bson.M{“version”:0,_id:0,“events”:bson.M{“$slice”:-1}})
从ans中删除那些不需要的参数。