将文档插入MongoDB中的另一个文档

时间:2015-12-19 16:07:30

标签: java mongodb mongodb-java mongo-collection

我试图在另一个文档中添加文档。

enter image description here

我正在尝试插入一个新文档,其中时间戳作为关键点,并将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())
                    ))));

目前,此代码会覆盖数据库中已有的时间戳。

2 个答案:

答案 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())
                    )));

这很有效。给出:

enter image description here