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

配列内のMongoDB名前変更データベースフィールド

    やりがいのあることとしては、やらなければならないことはひどいように聞こえますが、解決策は実際には非常に簡単です。もちろん、これはレコードの数によって異なります。しかし、これが私の例です:

    db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
    {    
        for(i = 0; i != item.Value.Tiers.length; ++i)
        {
            item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
            delete item.Value.Tiers[i].AssetsUnderManagement;
        }
        
        db.Setting.update({_id: item._id}, item);
    });
    

    配列が見つかり、「間違った」名前が見つかったコレクションを繰り返し処理します。次に、サブコレクションを繰り返し処理し、新しい値を設定し、古い値を削除して、ドキュメント全体を更新します。比較的痛みはありませんでした。確かに、検索する行は数万行しかなく、そのうち数十行だけが基準を満たしています。

    それでも、この回答が誰かに役立つことを願っています!

    編集:snapshot()を追加しました クエリに。コメントで理由を確認してください。

    snapshot()を適用する必要があります データベースからドキュメントを取得する前にカーソルを移動します。使用できるのはsnapshot()のみです。 シャーディングされていないコレクションを使用します。

    MongoDB 3.4から、snapshot() 関数が削除されました。したがって、Mongo 3.4以降を使用している場合、上記の例ではsnapshot()を削除する必要があります。 機能。



    1. マングースで数値をインクリメントするにはどうすればよいですか?

    2. ClusterControlを使用してオープンソースデータベースを保護する方法

    3. 論理バックアップを使用してMongoDBで特定のコレクションを復元する方法

    4. クエリに存在しないフィールドを持つドキュメントを検索結果から除外するにはどうすればよいですか?