Вставка документа в другой документ в 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())
))));


В настоящее время этот код переопределяет метку времени, которая уже есть в БД.

727   2  

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

    Ничего не найдено.