我有一个与我使用的MongoDB集合类型匹配的 struct :

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

我希望LastSeed字段保存上次与特定应用程序交互的时间.因此,应用程序注册自己设置当前时间(作为字符串).

我希望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,就像Javascript中的Date对象:

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

插入现在发生的事件:

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

Mongodb相关问答推荐

MongoDB索引使用

如何在Mongo Aggregate Query中创建集合的对象ID数组,并在列表中查找另一个集合中的ID

MongoDB与合并对象聚合

在MongoDB集合中按文档内的频率对数组排序

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

从 kubectl exec 获取返回值到 powershell 脚本

通过 _id 更新一个文档(无效的 BSON 字段名称 _id)

创建索引需要很长时间

为什么 MongoDB 配置服务器必须只有一个或三个?

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

如何在 MongoDb 中使用杰克逊将日期字段存储为 ISODate()

MongoDB:设置 Windows 服务

Node.js 和 MongoDB,重用 DB 对象

嵌套在文档数组中的mongodb展开数组

在 Mongoose 中填写所有必填字段

Flask:设置应用程序和请求特定的属性?

一起使用 MongoDB 和 Neo4j

MongoDB 查询:字段不存在或具有特定值

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?

聚合 $lookup 匹配管道中文档的总大小超过最大文档大小