我试图在另一个文档中添加文档。
我正在尝试插入一个新文档,其中时间戳作为关键点,并将light prox和temp作为该文档的内容插入到文档sensor_collection
中。
我的代码不起作用是合乎逻辑的,因为我设置了新的sensor_collection
。有谁知道如何在sensor_collection
中设置时间戳文档,还是建议不要这样做?
这是代码:
MongoCollection<Document> collection = db.getCollection(Sensor.KEY_COLLECTION);
//append sensor data to existing document
collection.updateOne(doc, new Document("$set",
new Document("sensor_collection", new Document(
String.valueOf(stamp.getCurrentTime()), new Document(
Sensor.KEY_LIGHT, sensorData.getLight())
.append(Sensor.KEY_PROX, sensorData.getProx())
.append(Sensor.KEY_TEMP, sensorData.getTemp())
))));
目前,此代码会覆盖数据库中已有的时间戳。
答案 0 :(得分:1)
如果要附加到现有嵌入式收藏集,请使用$push
代替$set
。 $push
运算符将指定值附加到数组。像这样:
collection.updateOne(doc, new Document("$push",
new Document("sensor_collection", new Document(
String.valueOf(stamp.getCurrentTime()), new Document(
Sensor.KEY_LIGHT, sensorData.getLight())
.append(Sensor.KEY_PROX, sensorData.getProx())
.append(Sensor.KEY_TEMP, sensorData.getTemp())
))));
有关mongo更新运算符的更多详细信息,请check this out
答案 1 :(得分:0)
在the Mongodb documentation我发现了这个:
“要在嵌入文档或数组中指定<field>
,请使用点表示法。”
我使用了$ set运算符。我正在设置sensor_collection.timestamp
MongoCollection<Document> collection = db.getCollection(Sensor.KEY_COLLECTION);
//append sensor data to existing document
collection.updateOne(doc, new Document("$set",
new Document("sensor_collection."+String.valueOf(stamp.getCurrentTime()),
new Document(
Sensor.KEY_LIGHT, sensorData.getLight())
.append(Sensor.KEY_PROX, sensorData.getProx())
.append(Sensor.KEY_TEMP, sensorData.getTemp())
)));
这很有效。给出: