web-dev-qa-db-ja.com

MongoDBコレクション内のすべてのドキュメントに対して単一のフィールドを選択する方法

私のMongoDBでは、フィールドnamerollを持つ10レコードを持つ学生コレクションを持っています。このコレクションの1つの記録は以下の通りです:

{
    "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),
    "name" : "Swati",
    "roll" : "80",
}

以下のようにして伝統的なデータベースで行うのと同じように、コレクション内の全10レコードについてのみフィールドrollを取得したいと思います。

SELECT roll FROM student

私は多くのブログを見ましたが、すべてがWHERE節を含まなければならないクエリに終わっています、例えば:

db.students.find({ "roll": { $gt: 70 })

このクエリは以下と同等です。

SELECT * FROM student WHERE roll > 70

私の要件は、条件なしでただ一つのキーを見つけることです。それで、そのためのクエリ操作は何ですか。

158
Shipra Swati

MongoDBのドキュメントから

射影には複数のフィールドを明示的に含めることができます。次の操作では、find()メソッドはクエリに一致するすべてのドキュメントを返します。結果セットでは、itemフィールドとqtyフィールド、およびデフォルトでは_idフィールドのみが一致する文書内に返されます。

db.inventory.find({type: 'food'}、{item:1、qty:1})

Mongoの人々によるこの例では、返されるドキュメントはitemqty、および_idのフィールドのみを含みます。


したがって、次のような文を発行できるはずです。

db.student.find({}, {roll:1, _id:0})

上記のステートメントは、Studentsコレクション内のすべてのドキュメントを選択し、返されたドキュメントはrollフィールドのみを返します(そして_idを除外します)。

_id:0について言及していない場合、返されるフィールドはrollおよび_idになります。 '_id'フィールドは常にデフォルトで表示されます。そのため、rollと共に_id:0を明示的に言及する必要があります。

189
therealrootuser

_idなしでテーブルからすべてのデータを取得

db.student.find({}, {_id:0})

学生から選択*

_idを使用して1つのフィールドからすべてのデータを取得します

db.student.find({}, {roll:1})

学生からのSELECTロール

_idなしで1つのフィールドからすべてのデータを取得します

db.student.find({}, {roll:1, _id:0})

where句を使用して指定されたデータを検索

db.student.find({roll: 80})

SELECT * FROM StudentsからWHERE roll = '80'

where句を使用し、条件よりも大きいデータを検索します

db.student.find({ "roll": { $gt: 70 }})

選択*生徒のどこからロール> '70'

where句を使用し、条件以下のデータを検索します

db.student.find({ "roll": { $lte: 70 }})

SELECT * FROM StudentからWHERE roll <= '70'

where句を使用して、条件付きよりも小さいデータを検索します

db.student.find({ "roll": { $lt: 70 }})

SELECT * FROM StudentからWHERE roll <'70'

51
gowtham

私はmattingly890が正しい答えを持っていると思います、ここにパターン/命令と共に別の例があります

db.collection.find( {}, {your_key:1, _id:0})

enter image description here

51
grepit

次のクエリを試してください。

db.student.find({}, {roll: 1, _id: 0}).pretty();

お役に立てれば!!

5
Karan Khanna

教育目的のためだけに、次のいずれかの方法でそれを行うこともできます。

1。

    var query = {"roll": {$gt: 70};
    var cursor = db.student.find(query);
    cursor.project({"roll":1, "_id":0});

2。

    var query = {"roll": {$gt: 70};
    var projection = {"roll":1, "_id":0};
    var cursor = db.student.find(query,projection);

`

4

これは私のために働きます、

db.student.find({},{"roll":1})

where句に条件がありません。つまり、最初の中括弧の内側です。次の中括弧の内側:結果に必要な投影フィールド名のリスト。1は特定のフィールドが照会結果の一部であることを示します

3

理解を深めるために、私は同様のMySQLクエリを書きました。

Selecting specific fields 

MongoDB: db.collection_name.find({}、{name:true、email:true、phone:true});

MySQL: table_nameからの名前、電子メールアドレス、電話番号。

Selecting specific fields with where clause

MongoDB: db.collection_name.find({email:'[email protected] '}、{name:true、email:true、phone:true});

MySQLの場合: name、メールアドレス、電話番号をtable_nameから選択しますWHERE email = '[email protected]';

2
Hasib Kamal
db.<collection>.find({}, {field1: <value>, field2: <value> ...})

あなたの例では、次のようなことができます。

db.students.find({}, {"roll":true, "_id":false})

射影

射影パラメータは、一致するドキュメントに返されるフィールドを決定します。射影パラメータは次の形式のドキュメントを取ります。

{ field1: <value>, field2: <value> ... }
The <value> can be any of the following:
  1. 1または返品伝票に項目を含める場合はtrue

  2. 0またはフィールドを除外する場合はfalse

_ note _

_idフィールドでは、_id:1を明示的に指定して_idフィールドを返す必要はありません。フィールドを抑制するために_id:0を指定しない限り、find()メソッドは常に_idフィールドを返します。

続きを読む

2
Anthony Awuley

学生の名前を取得

student-details = db.students.find({{ "roll": {$gt: 70} },{"name": 1, "_id": False})

生徒の名前とロールを取得する

student-details = db.students.find({{ "roll": {$gt: 70}},{"name": 1,"roll":1,"_id": False})
2
PrabhuPrakash

ここでは、3通りのやり方で、 最短 をつまらないとします。

db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way

削除 特定のフィールドに-演算子を使用

db.student.find({}).select('roll -_id') // <--- Will remove id from result
1
Vivek Doshi

gowthamの答え は完了していますが、これらのコマンドはAPIごとに異なる場合があることに注意する価値があります(mongoのシェルを使用しない場合)。
詳細については ドキュメントリンク を参照してください。

例えば、 Nodejs には、投影するためにfind関数に追加する `projectionというメソッドがあります。

同じサンプルセットに従って、Nodeでは次のようなコマンドを使用できます。

db.student.find({}).project({roll:1})

SELECT _id、学生からロール

または
db.student.find({}).project({roll:1, _id: 0})

学生からのSELECTロール

等々。

Nodejsユーザーにとっても、.thenコマンドを追加するために toArray を使用することを忘れないでください(以前にこのAPIを使用したことがある場合は既によく知っているはずです)。

1
Smily

別のオブジェクトにネストされたフィールドを表示する場合は、次の構文を使用できるという回答に追加したいだけです

db.collection.find( {}, {{'object.key': true}})

ここで、キーはobjectという名前のオブジェクト内にあります

{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }

0
db.student.find({}, {"roll":1, "_id":0})

これは - と同等です -

学生からロールを選択



db.student.find({}、{"ロール":1、 "名前":1、 "_id":0})

これは - と同等です -

ロール、学生からの名前を選択してください

0
Rito

シェルでこのようなクエリを使用します。

1. database_nameを使う

e.g: use database_name

2. 一致するとアセットの特定のフィールド情報のみを返す、_id:0は結果にIDを表示しないことを指定します

db.collection_name.find( { "Search_Field": "value" }, 
                  { "Field_to_display": 1,_id:0 }  )
0

Studio 3T for MongoDBを使用して、.find({}, { _id: 0, roll: true })を使用すると、空の_idプロパティを持つオブジェクトの配列を返します。

JavaScript mapを使用すると、目的のrollプロパティのみを文字列の配列として取得できました。

var rolls = db.student
  .find({ roll: { $gt: 70 } }) // query where role > 70
  .map(x => x.roll);           // return an array of role
0
j3ff

Mongodb 3.4では、以下のロジックを使用できますが、以前のバージョンについてはよくわかりません

生徒からロールを選択==> db.student.find(!{}、{roll:1})

上記のロジックは、いくつかの列を定義するのに役立ちます(列が少ない場合)。

0
Pulla

コレクション内の10レコードすべてについてのみフィールド "roll"を取得したい場合。それからこれを試してください。

MongoDbでは:

db.students.find({}、{"roll":{"$ roll"})

SQLでは:

学生からロールを選択

0
Biju Maharjan