从 GoLang 中的 mongodb 获取最后插入的元素

Posted

技术标签:

【中文标题】从 GoLang 中的 mongodb 获取最后插入的元素【英文标题】:Get last inserted element from mongodb in GoLang 【发布时间】:2016-11-02 19:31:21 【问题描述】:

我有一个这样的结构:

type SavedData struct 
    ID   bson.ObjectId `bson:"_id"`
    Data string
    Date time.Time

我也有我的

collection := database.C("coll_name")

如何检索此集合中最后插入的条目?

谢谢

【问题讨论】:

【参考方案1】:

显然 mongoDB 默认按照插入时间排序 this question 所以你可以像这样跳过集合的前 N ​​个元素。

var myData SavedData 
dbSize, err := collection.Count()
if err != nil 
        return err


err = c.Find(nil).skip(dbSize-1).One(&myData)
if err != nil 
        return err

或者你可以按相反的顺序搜索

c.Find(bson.M "$natural": -1 ).One(&myData)

【讨论】:

哪个更快?【参考方案2】:

接受的答案是 5 岁。这应该适用于今天的 mongodb 驱动程序

collection.FindOne(ctx, bson.M"$natural": -1)

【讨论】:

嗨,如果我试试这个,我会得到unknown top level operator: $natural。你认为它会是什么?【参考方案3】:

如果你想获取集合中的最新文档,你必须使用 mongo-driver 选项

import(
    ...
    "go.mongodb.org/mongo-driver/mongo/options"
)

myOptions := options.FindOne()
myOptions.SetSort(bson.M"$natural":-1)
collection.FindOne(ctx, bson.M, myOptions)

【讨论】:

试过了,myOptions := options.FindOne() myOptions.SetSort(bson.M"$natural":-1) current, err := idCollection.Find(context.TODO() , myOptions) 当前变为空

以上是关于从 GoLang 中的 mongodb 获取最后插入的元素的主要内容,如果未能解决你的问题,请参考以下文章

Golang GraphQL MongoDB 努力从数据库中获取日期和 ID

带有 mgo 的 Go (golang) 中的 MongoDB:如何更新记录、确定更新是不是成功并在单个原子操作中获取数据?

如何使用Java从mongodb获取最后插入的N条记录?

如何使用Java从mongodb获取最后插入的N条记录?

Golang mongodb 从集合中删除所有项目 [mgo.v2]

在golang中无法通过ObjectId获取mongodb记录