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

MongoDBのクエリ結果のフィールドの名前を変更します

    MongoDBでコレクションをクエリするときに、フィールド名に満足できない場合があります。デフォルトでは、フィールド名は実際のドキュメントのフィールド名を反映したものにすぎません。

    おそらく、フィールド名に一貫性がないか、タイプミスがあります。理由が何であれ、$projectを使用できます クエリ結果のフィールドの名前を変更するための集約パイプラインステージ。

    いくつかの点で、これはSQLでエイリアスを使用することに匹敵します。これは、基になるフィールドの名前を変更せず、クエリ結果で名前を変更するだけだからです。

    次のようなコレクションのコンテンツを返すとします。

    db.employees.find()

    結果:

    { "_id" : 2, "name" : "Sarah", "salary" : 128000 }
    { "_id" : 3, "name" : "Fritz", "salary" : 25000 }
    { "_id" : 4, "name" : "Chris", "salary" : 45000 }
    { "_id" : 5, "name" : "Beck", "salary" : 82000 }

    ここでは、find()を使用します コレクションの内容を返すメソッド。

    この場合、各フィールドの名前が結果に返されます。

    しかし、フィールド名を変えたい場合はどうでしょうか。たとえば、nameを置き換えたい場合はどうなりますか employeeと ?

    その場合、aggregate()を使用できます 次のようなクエリを実行するメソッド:

    db.employees.aggregate([
      { "$project": { "employee": "$name", "salary": 1 }}
    ])

    結果:

    { "_id" : 2, "salary" : 128000, "employee" : "Sarah" }
    { "_id" : 3, "salary" : 25000, "employee" : "Fritz" }
    { "_id" : 4, "salary" : 45000, "employee" : "Chris" }
    { "_id" : 5, "salary" : 82000, "employee" : "Beck" }

    MongoDBは、挿入順にフィールドを表示することに注意してください。これにより、salaryが生成されます。 employeeの前に表示されるフィールド 分野。それが受け入れられない場合は、いつでもクエリを次のように変更できます:

    db.employees.aggregate([
      { "$project": { "employee": "$name", "salary": "$salary" }}
    ])

    結果:

    { "_id" : 2, "employee" : "Sarah", "salary" : 128000 }
    { "_id" : 3, "employee" : "Fritz", "salary" : 25000 }
    { "_id" : 4, "employee" : "Chris", "salary" : 45000 }
    { "_id" : 5, "employee" : "Beck", "salary" : 82000 }

    埋め込みドキュメントのフィールドの名前を変更する

    同じ方法を使用して、埋め込みドキュメントのフィールドの名前を変更できます。この場合、ドット表記を使用して、名前を変更するフィールドを参照します。

    petsに対して次のクエリを実行するとします。 コレクション:

    db.pets.find().pretty()

    結果:

    {
    	"_id" : 1,
    	"name" : "Wag",
    	"details" : {
    		"type" : "Dog",
    		"weight" : 20,
    		"awards" : {
    			"Florida Dog Awards" : "Top Dog",
    			"New York Marathon" : "Fastest Dog",
    			"Sumo 2020" : "Biggest Dog"
    		}
    	}
    }
    {
    	"_id" : 2,
    	"name" : "Fetch",
    	"details" : {
    		"born" : ISODate("2020-06-22T14:00:00Z"),
    		"color" : "Black"
    	}
    }
    {
    	"_id" : 3,
    	"name" : "Scratch",
    	"details" : {
    		"eats" : [
    			"Mouse Porridge",
    			"Bird Soup",
    			"Caviar"
    		],
    		"type" : "Cat",
    		"born" : ISODate("2020-12-19T14:00:00Z")
    	}
    }

    埋め込まれたドキュメントのフィールドの名前は次のように変更できます:

    db.pets.aggregate([
      { "$project": 
        { 
          "_id": 0,
          "Pet": "$name",
          "Type": "$details.type",
          "Born": "$details.born"
        }
      }
    ])

    結果:

    { "Pet" : "Wag", "Type" : "Dog" }
    { "Pet" : "Fetch", "Born" : ISODate("2020-06-22T14:00:00Z") }
    { "Pet" : "Scratch", "Type" : "Cat", "Born" : ISODate("2020-12-19T14:00:00Z") }

    この場合、埋め込まれたドキュメントのすべてのフィールドを選択したわけではありませんが、わかります。

    "_id": 0も使用しました _idを省略します フィールド。

    また、ドキュメントに$projectで指定されたフィールドが実際にない場合も注意してください。 ステージの場合、結果のドキュメントでは単純に省略されます。これは、Bornを省略した最初のドキュメントで確認できます。 フィールド、およびTypeを省略した2番目のドキュメント フィールド。


    1. Django、Redis:接続コードを配置する場所

    2. MongoDB$sortByCount集約演算子

    3. コマンドラインからredis-serverをシャットダウンします

    4. 1つのコマンドでmongoDBを停止する方法