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

MongoDBとそのドライバーは、ドキュメント要素の順序を保持できますか?

    バージョン2.6以降、 MongoDBは、可能な場合、フィールドの順序を保持します。 ただし、_id フィールドは常に最初に来ます。フィールドの名前を変更すると、並べ替えにつながる可能性があります。しかし、私は通常、このような詳細に依存しないようにします。元の質問が述べているように、注文の安定性のためにそれぞれが何らかの保証を提供しなければならないことを検討するための追加のレイヤーもあります...

    元の回答:

    いいえ、MongoDB は、フィールドの順序について保証しません

    特に、ドキュメントサイズを変更するインプレース更新では、通常、フィールドの順序が変更されます。たとえば、$set 古い値がnumber型で、新しい値がNumberLongであるフィールド 、フィールドは通常、並べ替えられます。

    ただし、配列は順序を正しく保持します:

    [ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
    

    なぜこれが「醜い」「肥大化」しているのか全くわかりません。複雑なオブジェクトのリストを保存するのは簡単ではありません。ただし、オブジェクトをリストとして悪用することは間違いなく醜いです。オブジェクトには連想配列のセマンティクスがあります(つまり、指定された名前のフィールドは1つしか存在できません)が、リスト/配列にはありません:

    // not ok:
    db.foo2.insert({"foo" : "bar", "foo" : "lala" });
    db.foo2.find();
    { "_id" : ObjectId("4ef09cd9b37bc3cdb0e7fb26"), "foo" : "lala" }
    
    // a list can do that
    db.foo2.insert({ 'array' : [ {'foo' : 'bar'}, { 'foo' : 'lala' } ]});
    db.foo2.find();
    { "_id" : ObjectId("4ef09e01b37bc3cdb0e7fb27"), "array" : 
          [ { "foo" : "bar" }, { "foo" : "lala" } ] }
    

    MongoDBはオブジェクトデータベースであり、キー/値ストアではないことに注意してください。



    1. 複数のRedisデータベースのポイントは何ですか?

    2. MongoDBを使用して配列フィールド内の特定のキー/値を更新する

    3. MongoDB-ネストされた配列のオブジェクトを更新します

    4. mongodbの合計値を平均する方法は?