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

MongoDB-リストを含むアップサート

    位置演算子( "$")とアップサートを混在させることはできません。 「$」は、挿入時にフィールド名として扱われます。新しいドキュメントに対してはこれを行うことはできず、既存のドキュメントに対してのみ行うことができます。

    私はこのような構造を提案しました:

    {"_id" : ObjectId("4c28f62cbf8544c60506f11d"),
    "some_other_data":"goes here",
    "trips": { 
        "2010-05-10":
           [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"}, 
            {"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}],
        "2010-05-08": 
           [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"},
            {"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"}, 
            {"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}]
        }
    }
    

    次に、次のような更新を発行できます:

    db.mycollection.update({application_id: "MyTestApp", "trips.2010-05-10":{$exists:true}},
                           {$push: {"trips.2010-05-10": {lat:11, lng:11} }}, 
                           true);
    

    これが挿入されます。

    > db.mycollection.find()
    { "_id" : ObjectId("4c2931d17b210000000045f0"), 
        "application_id" : "MyTestApp", 
        "trips" : { "2010-05-10" : [ { "lat" : 11, "lng" : 11 } ] } }
    

    もう一度実行すると、次のようになります:

    > db.mycollection.find()
    { "_id" : ObjectId("4c2932db7b210000000045f2"), 
        "application_id" : "MyTestApp", 
        "trips" : { "2010-05-10" : 
            [ { "lat" : 11, "lng" : 11 }, 
              { "lat" : 11, "lng" : 11 } ] } }
    


    1. 変更ストリームを使用して本番環境でMongoDBを実行するためのヒント

    2. mongodbでインデックスを使用するランタイム

    3. Redisでの範囲クエリ-SpringDataRedis

    4. MongoDBから返されたlastErrorObjectプロパティを解釈する方法は?