私のMongoDBでは、フィールドname
とroll
を持つ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
私の要件は、条件なしでただ一つのキーを見つけることです。それで、そのためのクエリ操作は何ですか。
射影には複数のフィールドを明示的に含めることができます。次の操作では、find()メソッドはクエリに一致するすべてのドキュメントを返します。結果セットでは、itemフィールドとqtyフィールド、およびデフォルトでは_idフィールドのみが一致する文書内に返されます。
db.inventory.find({type: 'food'}、{item:1、qty:1})
Mongoの人々によるこの例では、返されるドキュメントはitem
、qty
、および_id
のフィールドのみを含みます。
したがって、次のような文を発行できるはずです。
db.student.find({}, {roll:1, _id:0})
上記のステートメントは、Studentsコレクション内のすべてのドキュメントを選択し、返されたドキュメントはroll
フィールドのみを返します(そして_id
を除外します)。
_id:0
について言及していない場合、返されるフィールドはroll
および_id
になります。 '_id'フィールドは常にデフォルトで表示されます。そのため、roll
と共に_id:0
を明示的に言及する必要があります。
_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'
私はmattingly890が正しい答えを持っていると思います、ここにパターン/命令と共に別の例があります
db.collection.find( {}, {your_key:1, _id:0})
次のクエリを試してください。
db.student.find({}, {roll: 1, _id: 0}).pretty();
お役に立てれば!!
教育目的のためだけに、次のいずれかの方法でそれを行うこともできます。
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);
`
これは私のために働きます、
db.student.find({},{"roll":1})
where句に条件がありません。つまり、最初の中括弧の内側です。次の中括弧の内側:結果に必要な投影フィールド名のリスト。1は特定のフィールドが照会結果の一部であることを示します
理解を深めるために、私は同様の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]';
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または返品伝票に項目を含める場合はtrue
0またはフィールドを除外する場合はfalse
_ note _
_idフィールドでは、_id:1を明示的に指定して_idフィールドを返す必要はありません。フィールドを抑制するために_id:0を指定しない限り、find()メソッドは常に_idフィールドを返します。
学生の名前を取得
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})
ここでは、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
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を使用したことがある場合は既によく知っているはずです)。
別のオブジェクトにネストされたフィールドを表示する場合は、次の構文を使用できるという回答に追加したいだけです
db.collection.find( {}, {{'object.key': true}})
ここで、キーはobjectという名前のオブジェクト内にあります
{ "_id" : ObjectId("5d2ef0702385"), "object" : { "key" : "value" } }
db.student.find({}, {"roll":1, "_id":0})
これは - と同等です -
学生からロールを選択
db.student.find({}、{"ロール":1、 "名前":1、 "_id":0})
これは - と同等です -
ロール、学生からの名前を選択してください
シェルでこのようなクエリを使用します。
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 } )
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
Mongodb 3.4では、以下のロジックを使用できますが、以前のバージョンについてはよくわかりません
生徒からロールを選択==> db.student.find(!{}、{roll:1})
上記のロジックは、いくつかの列を定義するのに役立ちます(列が少ない場合)。
コレクション内の10レコードすべてについてのみフィールド "roll"を取得したい場合。それからこれを試してください。
MongoDbでは:
db.students.find({}、{"roll":{"$ roll"})
SQLでは:
学生からロールを選択