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

配列が存在する場合はオブジェクトを配列にプッシュし、そうでない場合はMongoDBでオブジェクトを使用して配列を作成します

    ここで考えられるすべてのケースを説明するために、各ドキュメントのケースを検討してください。

    変更するドキュメントが次のようになっている場合:

    {
        "_id": "efgh",
        "name": "Jerry"
    }
    

    次に、次のような更新ステートメント:

    db.collection.update(
        { "_id": "efgh" },
        { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
    )
    

    結果:

    {
        "_id": "efgh",
        "name": "Jerry",
        "myArray": [
            {
                "field1": "abc",
                "field2": "def"
            }
        ]
    }
    

    したがって、配列が作成され、新しいアイテムが追加されます。

    ドキュメントにすでに次のような配列がある場合:

    {
        "_id": "abcd",
        "name": "Tom",
        "myArray": [
            {
                "field1": "",
                "field2": ""
            }
        ]
    }
    

    そして、あなたは基本的に同じステートメントを行います:

    db.collection.update(
        { "_id": "abcd" },
        { "$push": { "myArray": { "field1": "abc", "field2": "def" } } }
    )
    

    次に、新しいドキュメントコンテンツが既存のアレイに追加されます:

    {
        "_id": "abcd",
        "name": "Tom",
        "myArray": [
            {
                "field1": "",
                "field2": ""
            },
            {
                "field1": "abc",
                "field2": "def"
            }
        ]
    }
    

    ただし、元のドキュメントに名前付きフィールドがあり、配列ではない場合は、次のようになります。

    {
        "_id": "efgh",
        "name": "Jerry",
        "myArray": 123
    }
    

    次に、クエリ条件でテストし、を使用して、配列ではないことを確認します。 $set 代わりに:

    db.collection.update(
        { "_id": "efgh", "myArray.0": { "$exists": false } },
        { "$set": { "myArray": [{ "field1": "abc", "field2": "def" }] } }
    )
    

    これにより、配列ではない要素(ドット表記「myArray.0」は最初の配列要素を意味しますが、これはtrueではありません)をコンテンツを含む新しい配列で安全に上書きします。結果は元の結果と同じです:

    {
        "_id": "efgh",
        "name": "Jerry",
        "myArray": [
            {
                "field1": "abc",
                "field2": "def"
            }
        ]
    }
    


    1. mean.jsメニューisPublicが機能していません

    2. mongodbで集計ルックアップした後、深くネストされたIDの配列を設定するにはどうすればよいですか?

    3. mongodb /mongoosefindMany-配列にリストされているIDを持つすべてのドキュメントを検索します

    4. MGETに似たHASHデータ構造のコマンドがRedisにありますか?