如何使用 golang 获取 mongodb 数组中的最后一个元素?
how to get last element present in array in mongodb using golang?
我在用go语言工作。我正在使用 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
}
]
}
作为第二个参数传递给 find()
is a 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)
我在用go语言工作。我正在使用 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
}
]
}
作为第二个参数传递给 find()
is a 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)