【问题标题】:How to send a mongodb shell function on jongo insert functions如何在 jongo 插入函数上发送 mongodb shell 函数
【发布时间】:2014-10-08 19:24:04
【问题描述】:

我正在尝试在 Jongo 驱动程序函数上使用 MongoDB shell 函数(如 Date())来为我的字段生成一个值。代码如下:

collection.insert( "{ date: Date() }" );

但它似乎不起作用,有什么建议吗?

这些是错误行

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at org.bson.io.PoolOutputBuffer.write(PoolOutputBuffer.java:89)
at org.bson.LazyBSONObject.pipe(LazyBSONObject.java:474)
at org.jongo.bson.BsonDBEncoder.writeObject(BsonDBEncoder.java:39)
at com.mongodb.BSONBinaryWriter.encodeDocument(BSONBinaryWriter.java:339)
at com.mongodb.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:45)
at com.mongodb.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:23)
at com.mongodb.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:69)
at com.mongodb.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:23)
at com.mongodb.RequestMessage.encode(RequestMessage.java:66)
at com.mongodb.BaseWriteCommandMessage.encode(BaseWriteCommandMessage.java:53)
at com.mongodb.DBCollectionImpl.sendWriteCommandMessage(DBCollectionImpl.java:473)
at com.mongodb.DBCollectionImpl.writeWithCommandProtocol(DBCollectionImpl.java:427)
at com.mongodb.DBCollectionImpl.insertWithCommandProtocol(DBCollectionImpl.java:387)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:186)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
at com.mongodb.DBCollection.insert(DBCollection.java:161)
at com.mongodb.DBCollection.insert(DBCollection.java:107)
at com.mongodb.DBCollection.save(DBCollection.java:966)
at org.jongo.Insert.save(Insert.java:49)
at org.jongo.MongoCollection.save(MongoCollection.java:128)
at learningjongo.DAO.setUp(DAO.java:42)

【问题讨论】:

  • 在什么情况下不起作用?
  • 它只是没有用。我发布了错误行。

标签: java mongodb jongo


【解决方案1】:

我建议你这样做

collection.insert("{ date: # }", new java.util.Date());

这相当于做{ date: ISODate() }{ date: new Date() }

按照您在问题中的建议使用 Date() 会产生一个字符串,因此要模仿这种行为,您只需执行类似的操作

collection.insert("{ date: # }", new java.util.Date().toString());

但如果您有选择,我建议您将其存储为适当的日期,而不是字符串。

【讨论】:

  • 我希望 mongo 来做这项工作,而不是我。我喜欢日期的 mongo 字符串,它已经足够好了。
  • 我不认为 Jongo 处理那些内置函数。我敢打赌 Jongo 开发人员认为您应该使用 # 参数占位符插入 Java 对象。
  • @user3283066,我对此进行了深入研究,AFAICT 无法从 Jongo 调用 mongo-internal 函数。请考虑accepting这个答案
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2018-03-05
  • 2020-07-30
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多