在 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())
)));
这行得通。给出:
我正在尝试在另一个文档中添加一个文档。
我正在尝试将一个新文档插入到文档 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())
)));
这行得通。给出: