sql >> データベース >  >> NoSQL >> MongoDB

ネストされた配列マングースの更新

    データモデルを再考することをお勧めします。現在のように、あなたはあなたが望むことを達成することはできません。センサーフィールドはアレイを指します。提供した理想的なドキュメント形式では、その配列内に単一のオブジェクトがあります。次に、そのオブジェクト内に、まったく同じキーを持つ2つのフィールドがあります。 JSONオブジェクト、またはこのコンテキストのmongoドキュメントでは、同じオブジェクト内に重複するキーを含めることはできません。

    ここで何を探しているのかは明確ではありませんが、おそらく次のようなものを探すのが最善でしょう:

    {
    "_id" : "Manasa",
    "name" : "Manasa Sub",
    "sensors" : [ 
        {
        "sensor_name" : "ras",
        "_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
        "measurements" : [ 
            {
                "time" : "8:00"
            },
            {
                "time" : "9:00"
            }
        ]
    },
    {
        // next sensor in the sensors array with similar format
        "_id": "",
        "name": "",
        "measurements": []
    }],
    }
    

    これが必要な場合は、これを試すことができます:

    User.findOneAndUpdate(
        {  _id:req.body._id "sensors.sensor_name": req.body.sensor_name },
        { $push: { "sensors.0.measurements": { "time": req.body.time } } }
    );
    

    また、補足として、測定値配列の各オブジェクトに1つの文字列のみを格納する場合は、オブジェクト全体ではなく、実際の値のみを格納することをお勧めします{ time: "value" } 。この方法でデータを処理する方が簡単な場合があります。



    1. 関連するキーをOIDまたは文字列としてMongoDBに保存します

    2. PHPを使用してmongoドキュメントからデータを削除する

    3. ハッシュインデックスと昇順インデックスのMongodbパフォーマンスの違い(順序付けされていないフィールドでハッシュを使用しない理由はありますか?)

    4. 混合型で配列を表現する方法