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

Insert a document into another document in MongoDB

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

我正在尝试将一个新文档插入到文档 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())
                    ))));

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

如果要追加到现有的嵌入式集合,请使用 $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

the Mongodb documentation 我发现了这个:

"To specify a <field> in an embedded document or in an array, use dot notation."

我使用了 $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())
                    )));

这行得通。给出: