当前位置: 首页 > 面试题库 >

Golang / mgo:如何要求MongoDB在字段中使用当前时间?

吕永嘉
2023-03-14
问题内容

我有一个与我正在使用的MongoDB集合类型匹配的结构:

type AppInstance struct {
    Id bson.ObjectId "_id,omitempty"
    Url string
    Priority int
    LastSeen string
}

我希望LastSeen字段保存与该特定应用程序的最后一次交互的时间。因此,应用程序会自行注册以设置当前时间(以字符串形式)。

我想要的是Mongo在插入时动态地将自己的当前时间设置到该字段中,就像MySQL的NOW()函数一样。

我有这个辅助功能:

func mongoNow() bson.JavaScript {
    return bson.JavaScript{Code: 
         "return (new Date()).ISODate('YYYY-MM-DD hh:mm:ss');"}
}

我尝试了这个:

c := mongoSession.DB("myapp").C("instances")
rand.Seed(time.Now().UnixNano())
err := c.Insert(
   struct{Id, Serial, Priority, Url, LastSeen interface{}}{ 
      Id: bson.NewObjectId(), 
      Url: getInformedHost() + ":" + getRunningPortString(), 
      Priority: rand.Int(), 
      LastSeen: mongoNow() }
)
checkError(err, "Could not register on MongoDB server.", 3)

LastSeen字段存储为脚本而不是评估:

[_id] => MongoId Object (
    [$id] => 502d6f984eaead30a134fa10
)
[id] => MongoId Object (
    [$id] => 502d6f98aa443e0ffd000001
)
[priority] => 1694546828
[url] => 127.0.0.1:8080
[lastseen] => MongoCode Object (
    [code] => (new Date()).ISODate('YYYY-MM-DD hh:mm:ss')
    [scope] => Array (
    )
)

因此,我认为存在一些问题:

首先,如何插入当前时间?

其次,如何获取一些经过评估而不是插入的JavaScript?

对第二个答案的答案可能足以回答第一个答案,但也可能并非如此。


问题答案:

不要将时间存储为字符串。mgo支持time.Time,它类似于DateJavascript中的对象:

type Event struct {
    Id    bson.ObjectId "_id,omitempty"
    Which string
    Date  time.Time
}

插入一个现在发生的事件:

e := Event{
    Which: "first event",
    Date: time.Now(),
}
c.Insert(e)


 类似资料:
  • 问题内容: 我读过多个有关使用mgo保存文件的博客,但找不到满足特定需求的解决方案,请大声喊叫! 下面在MongoDb中插入对象: 下面能够保存文件: 现在,在插入对象之前,我需要将上述文件设置为: 我的结构对象: 用外行术语来说,问题是:如何使用mgo驱动程序通过GoLang结构在mongoDb中插入文件(从HTML表单接收)? 谢谢阅读!:) 更新: PDF存储在MongoDB中,如下所示:

  • 问题内容: 我在mgo主页上浏览了该示例,但是我一直在努力寻找一种查询一系列值的方法。该行: 失败,带有: 我省去了不必要的代码… 问题答案: 该行: 需要更改为:

  • 问题内容: 有人知道我们在mongodb shell中对golang mgo / bson使用的聚合命令等效吗? 像这样: 问题答案: 假设这是您的收藏夹: GoDoc参考: Collection.Pipe文档 管道及其方法

  • 问题内容: 我目前正在尝试在mongodb内部的文档数组中提取单个对象。这是一个样本数据集: 我可以在mongo中使用以下命令成功查询: 我无法使用mgo进行相同操作,并尝试了以下操作: 使用嵌套(抛出:合成文字中缺少类型,地图文字中缺少键) 我正在使用httprouter,p.ByName(“ …”)调用是传递给处理程序的参数。 提前致谢。 问题答案: 将与该 方法一起使用,因为doc指出,这使

  • 问题内容: 在MongoDB中,执行类似的操作将返回集合中的所有文档。 当使用包 **labix.org/v2/mgo** 在GoLang中工作时,例如,我这样做: 它抱怨它需要以接口形式输入。我需要做的就是检索所有文档并遍历它们,并立即显示每个文档。如何达到此效果?我所看到的所有示例似乎都已安装了过滤器。 问题答案: 找到了解决方案:

  • 问题内容: 我在使用mgo将mongodb中保留golang结构时遇到问题。 问题是,在完成Insert()调用后,唯一保留在数据库中的是空文档 我检查struct字段是否确实已设置,并且不为空。关于为什么这样的任何想法。提示表示赞赏:)谢谢 问题答案: 您需要通过以大写字母开头的字段名称来导出字段。