2

ドキュメントを別のドキュメントに追加しようとしています。

ここに画像の説明を入力

キーとしてタイムスタンプを使用し、そのドキュメントの内容としてライトプロキシと一時をドキュメントに挿入しようとしています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())
                    ))));

現在、このコードは、データベースに既にあるタイムスタンプをオーバーライドします。

4

2 に答える 2

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 の update オペレーターの詳細については、こちらをご覧ください

于 2015-12-19T16:51:56.123 に答える
0

Mongodbのドキュメントで私はこれを見つけました:

"埋め込みドキュメントまたは配列で a を指定する<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())
                    )));

これは機能します。与えます:

ここに画像の説明を入力

于 2015-12-19T21:57:02.370 に答える