Вставка документа в другой документ в MongoDB
Я пытаюсь добавить документ в другой документ.
Я пытаюсь вставить новый документ с меткой времени в качестве ключа и 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 ответов:
Если вы хотите добавить к существующей встроенной коллекции, используйте
$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, проверьте это
В документации Mongodb я нашел следующее:
" чтобы указать
<field>во вложенном документе или в массиве, используйте точечную нотацию."Я использовал оператор $set. И я устанавливаю 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."+String.valueOf(stamp.getCurrentTime()), new Document( Sensor.KEY_LIGHT, sensorData.getLight()) .append(Sensor.KEY_PROX, sensorData.getProx()) .append(Sensor.KEY_TEMP, sensorData.getTemp()) )));Это работает. Дает:


Comments