gpt4 book ai didi

java - Mongodb 在 Java 驱动程序中插入 $current Date

转载 作者:可可西里 更新时间:2023-11-01 10:03:52 30 4
gpt4 key购买 nike

我有一个关于 $currentDate 的问题使用 Java 驱动程序在 mongo db 中插入文档以使其包含“服务器时间”(如某些 RDBMS 中的“now()”)的最佳方法是什么?

例如,假设我有这样一个文档:

{
name : "John",
birthday : <$currentDate_goes_here>
}

我想要的是插入文档,以便在服务器端插入时由 mongo 服务器 完成日期评估。

这很关键,因为我们的服务器可能不会完全同步,并且需要有我们可以依赖的时间(例如 mongo 服务器上的时间)。

我正在为 mongo 使用标准的 java 驱动程序,因此非常欢迎使用 Java 中的任何代码片段。

这是我目前尝试过的

 MongoClient mongoClient = new MongoClient();
DB sampleDB = mongoClient.getDB("sampleDB");
BasicDBObject update =
new BasicDBObject("$set", new BasicDBObject("name","john")
.append("$currentDate", new BasicDBObject("birthday",true)));
sampleDB.getCollection("col1").insert(update);

这件事因以下异常而失败:

java.lang.IllegalArgumentException: Document field names can't start with '$' (Bad Key: '$set') at com.mongodb.DBCollection.validateKey(DBCollection.java:1845) at com.mongodb.DBCollection._checkKeys(DBCollection.java:1803) at com.mongodb.DBCollection._checkObject(DBCollection.java:1790) at com.mongodb.DBCollectionImpl.applyRulesForInsert(DBCollectionImpl.java:392) at com.mongodb.DBCollectionImpl.insertWithCommandProtocol(DBCollectionImpl.java:381) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:186) at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165) at com.mongodb.DBCollection.insert(DBCollection.java:93) at com.mongodb.DBCollection.insert(DBCollection.java:78) at com.mongodb.DBCollection.insert(DBCollection.java:120)

最佳答案

在这种情况下,答案相当简单。它实际上是关于从 java BasicDBObject 类序列化到基本的 MongoDB 解释。在不考虑您实际的“查询”文档的情况下,您声明的“更新”文档部分应该是:

    BasicDBObject update = new BasicDBObject("$set", new BasicDBObject("name","john")
.append("$currentDate", new BasicDBObject("birthrhday",true))
;

相对于 $currentDate,这确实会在“更新插入”或“修改”时使用“服务器时间”使用的修饰符。

这里要明确一点,您使用的不是 .insert() 方法,而是 "upsert"。使用 .insert() 操作。 “查询”和“更新”语法适用。另见 $setOnInsert专门用于不修改现有文档的运算符。

关于java - Mongodb 在 Java 驱动程序中插入 $current Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28986034/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com