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

MongoDB-プロジェクションクエリ

    プロジェクションクエリ 返されるフィールドを指定するクエリです。

    MongoDBで、db.collection.find()を使用してコレクションをクエリする場合 メソッドでは、返すフィールドを指定できます。

    これを行うには、クエリにフィールド名を含め、1を追加します。 または0 それらの隣に、それが返されるべきかどうかを指定します。これはプロジェクションです パラメータ。 1の投影パラメータ フィールドと0が表示されます 非表示にします。

    まず、なしでクエリを実行しましょう。 射影(返されるフィールドの数を確認できるように):

    投影なし

    db.musicians.find( { instrument: "Vocals"} )

    結果:

    { "_id" : 1, "name" : "Ian Gillan", "instrument" : "Vocals" }
    { "_id" : 6, "name" : "Jeff Martin", "instrument" : "Vocals", "born" : 1969 }
    

    プロジェクションあり

    それでは、プロジェクションを使用して name だけを表示してみましょう。 フィールド:

    db.musicians.find( { instrument: "Vocals" }, { name: 1 } )

    結果:

    { "_id" : 1, "name" : "Ian Gillan" }
    { "_id" : 6, "name" : "Jeff Martin" }
    

    _idに気付くでしょう 指定しなくても、フィールドは自動的に含まれます。 0を使用すると、このフィールドを除外できます それに対して:

    db.musicians.find( { instrument: "Vocals" }, { _id: 0, name: 1 } )

    結果:

    { "name" : "Ian Gillan" }
    { "name" : "Jeff Martin" }
    

    包含と除外の混合

    1を混在させることはできません sおよび0 s(_idを除く 分野)。次のように、包含と除外を混在させようとすると、次のようになります。

    db.musicians.find( { instrument: "Vocals" }, { name: 1, born: 0 } )

    このエラーが発生します:

    Error: error: {
    	"waitedMS" : NumberLong(0),
    	"ok" : 0,
    	"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
    	"code" : 2
    }
    

    したがって、フィールドを含めるか除外するかを選択します。両方ではありません。

    除外によってフィールドを指定する例を次に示します。

    db.musicians.find( { instrument: "Vocals" }, { _id: 0, instrument: 0 } )

    結果:

    { "name" : "Ian Gillan" }
    { "name" : "Jeff Martin", "born" : 1969 }
    

    1. Javaドライバーを使用してmongodbのドキュメントのフィールドを更新するにはどうすればよいですか?

    2. Redisトランザクション

    3. MongoDBの'count()'は非常に遅いです。どのようにそれを改良/回避しますか?

    4. タイムエクスプレスとredisセッションの有効期限