MongoDB संग्रह में सभी दस्तावेज़ों के लिए एक एकल फ़ील्ड का चयन कैसे करें?


223

मेरे MongoDB में, मेरे पास 10 रिकॉर्ड वाले फ़ील्ड्स के साथ एक छात्र संग्रह है nameऔर roll। इस संग्रह का एक रिकॉर्ड है:

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

मैं rollसंग्रह में सभी 10 रिकॉर्ड के लिए क्षेत्र को फिर से प्राप्त करना चाहता हूं जैसा कि हम पारंपरिक डेटाबेस में उपयोग करके करेंगे:

SELECT roll FROM student

मैं कई ब्लॉगों के माध्यम से गया था, लेकिन सभी एक प्रश्न के रूप में हैं, जो इसमें WHEREक्लॉज होना चाहिए , उदाहरण के लिए:

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

क्वेरी इसके बराबर है:

SELECT * FROM student WHERE roll > 70

मेरी आवश्यकता केवल एक ही कुंजी को बिना किसी शर्त के ढूंढना है। तो, उसके लिए क्वेरी ऑपरेशन क्या है।


@NeilLunn MongoDB मैपिंग के लिंक एसक्यूएल के लिए धन्यवाद । पता नहीं कैसे मैं यह याद किया।
शिप्रा स्वाति

जवाबों:


255

से MongoDB डॉक्स :

एक प्रक्षेपण में स्पष्ट रूप से कई फ़ील्ड शामिल हो सकते हैं। निम्नलिखित ऑपरेशन में, खोज () विधि क्वेरी से मेल खाने वाले सभी दस्तावेजों को वापस करती है। परिणाम सेट में, केवल आइटम और मात्रा फ़ील्ड और, डिफ़ॉल्ट रूप से, मेल दस्तावेजों में _id फ़ील्ड वापस आती है।

db.inventory.find ({प्रकार: 'खाना'}, {आइटम: 1, मात्रा: 1})

मोंगो में लोग से इस उदाहरण में, लौटे दस्तावेजों के ही क्षेत्रों में शामिल होंगे item, qtyऔर _id


इस प्रकार, आपको एक बयान जारी करने में सक्षम होना चाहिए जैसे:

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

उपरोक्त कथन छात्रों के संग्रह में सभी दस्तावेजों का चयन करेगा, और लौटा हुआ दस्तावेज़ केवल rollफ़ील्ड लौटा देगा (और बाहर कर देगा _id)।

यदि हम उल्लेख नहीं करते हैं तो _id:0वापस आए क्षेत्र rollऔर होंगे _id। '_Id' फ़ील्ड को हमेशा डिफ़ॉल्ट रूप से प्रदर्शित किया जाता है। इसलिए हम स्पष्ट रूप से उल्लेख करने की आवश्यकता _id:0के साथ roll


9
Google को ऐसा प्रतीत नहीं हो सकता, इसलिए शॉट के लायक है। क्या आपको उन सभी क्षेत्रों को स्पष्ट रूप से बाहर करना होगा जो आप नहीं चाहते हैं? कहते हैं कि आप केवल एक क्षेत्र चाहते हैं, लेकिन दस्तावेज़ में 10 हैं जो आपको उनमें से 09 के लिए निर्धारित करना है? संपादित करें: कोई बात नहीं, को छोड़कर _idयानी {field_I_want:1, _id:0}काम करने लगता है
कार्ल Tryggvason

यदि मैं अनुमानों का उपयोग करता हूं तो क्या फ़ील्ड जोड़ना और फिर डॉक्टर को अपडेट करना संभव है?
चॉवी

3
उत्तर में से कोई भी वास्तव में निम्नलिखित का उल्लेख नहीं करता है: नोट: With the exception of the _id field, you cannot combine inclusion and exclusion statements in projection documents.यह आप में से कुछ के लिए दिलचस्प हो सकता है। ( स्रोत )
user0800

137

तालिका से सभी डेटा प्राप्त करें

db.student.find({})

छात्र से चयन करें *


_id के बिना तालिका से सभी डेटा प्राप्त करें

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

नाम का चयन करें, छात्र से रोल


_id के साथ एक फ़ील्ड से सभी डेटा प्राप्त करें

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

छात्र का चयन करें, छात्र से रोल करें


_id के बिना एक क्षेत्र से सभी डेटा प्राप्त करें

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

छात्र से रोल का चयन करें


क्लॉज का उपयोग करके निर्दिष्ट डेटा खोजें

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

छात्रों से चयन करें * कहां से रोल करें '' 80 '


क्लॉज़ का उपयोग करके एक डेटा ढूंढें जहां क्लॉज़ और स्थिति से अधिक हो

db.student.find({ "roll": { $gt: 70 }}) // $gt is greater than 

छात्र से चुनें * कहाँ रोल> '70'


एक डेटा का उपयोग करके खोजें जहां क्लॉज और शर्त से अधिक या बराबर है

db.student.find({ "roll": { $gte: 70 }}) // $gte is greater than or equal

छात्र से रोल का चयन करें *> '70'


एक डेटा खोजें जिसमें क्लॉज़ और कंडीशन के बराबर या उससे कम हो

db.student.find({ "roll": { $lte: 70 }}) // $lte is less than or equal

छात्र का चयन करें * जहां से रोल <= '70'


जहां क्लॉज और कंडीशन से कम हो, वहां डेटा का इस्तेमाल करें

db.student.find({ "roll": { $lt: 70 }})  // $lt is less than

छात्र से चयन करें * कहाँ से रोल करें <'70'



2
बस जोड़ना चाहता था, क्योंकि आपके जवाब से मुझे अपने समाधान का पता लगाने में मदद मिली, _id को छोड़कर सभी गुणों को प्रदर्शित करने db.student.find({}, {_id:0})के लिए धन्यवाद मदद के लिए धन्यवाद।
user8675309

58

मुझे लगता है कि mattingly890 का सही उत्तर है, यहां पैटर्न / कॉमनैंड के साथ एक और उदाहरण है

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

यहां छवि विवरण दर्ज करें


मोंगो से आउटपुट दिखाने के लिए और यह एक उदाहरण के रूप में क्या देता है।
grepit

यार क्या तुमने मुझे एक डाउन वोट दिया क्योंकि मैंने अपने जवाब में स्क्रीनशॉट को शामिल किया था?
ग्रेपिट

हां, और इसलिए भी कि मैं यह नहीं देखता कि आपका जवाब
@therealrootuser के एवर

10

यहाँ आप जाते हैं, करने के 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
मुझे लगता है कि आपके उल्लिखित आदेश मानसून से हैं न कि 3 के सिवाय मोंगोडब।
आशीष

8

बस शैक्षिक उद्देश्यों के लिए आप इसे निम्न में से किसी भी तरीके से कर सकते हैं:

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);

`


8

निम्नलिखित प्रश्न आज़माएं:

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

उम्मीद है की यह मदद करेगा!!


सुंदर () केवल शेल के माध्यम से निष्पादित करते समय उपयोगी होगा, स्क्रिप्ट से नहीं।
दिनाकर

7
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 या सही दस्तावेज़ में फ़ील्ड को शामिल करने के लिए।

  2. क्षेत्र को बाहर करने के लिए 0 या गलत।

ध्यान दें

_Id फ़ील्ड के लिए, आपको _id फ़ील्ड को वापस करने के लिए _id: 1 को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है। जब तक आप _id: 0 को निर्दिष्ट नहीं करते हैं, तब तक खोज () पद्धति हमेशा _id फ़ील्ड लौटाती है।

अधिक पढ़ें


7

जबकि गौतम का जवाब पूरा है, यह ध्यान देने योग्य है कि वे कमांड एपीआई से दूसरे (उन लोगों के लिए जो मोंगो के शेल का उपयोग नहीं कर रहे हैं) में भिन्न हो सकते हैं।
कृपया विस्तृत जानकारी के लिए प्रलेखन लिंक देखें ।

उदाहरण के लिए, Nodejs के पास प्रोजेक्शन नामक एक विधि है, जिसे आप प्रोजेक्ट करने के लिए अपने फंक्शन में जोड़ेंगे।

एक ही उदाहरण सेट के बाद, निम्नलिखित जैसे आदेश नोड के साथ उपयोग किए जा सकते हैं:

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

छात्र से चयन करें, रोल करें

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

छात्र से रोल का चयन करें

और इसी तरह।

नोडज उपयोगकर्ताओं के लिए फिर से, toArrayअपनी .thenकमांड को जोड़ने के लिए उपयोग करने के लिए मत भूलना (यदि आप पहले से ही इस एपीआई का उपयोग करते थे तो आपको पहले से परिचित होना चाहिए) ।


4

बेहतर समझ के लिए मैंने इसी तरह की MySQL क्वेरी लिखी है।

Selecting specific fields 

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

MySQL: सेलेक्ट नेम, ईमेल, फोन FROM table_name;

Selecting specific fields with where clause

MongoDB: db.collection_name.find ({ईमेल: @you@email.com ’}, {name: true, email: true, phone: true});

MySQL: सेलेक्ट नेम, ईमेल, फोन फ्रॉम टेबल_नाम व्हेयर ईमेल = 'you@email.com';


3

यह मेरे लिए काम करता है,

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

जहां क्लाज यानी पहले घुंघराले ब्रेस के अंदर कोई स्थिति नहीं है। अगले घुंघराले ब्रेसिज़ के अंदर: परिणाम में आवश्यक होने के लिए प्रक्षेपण क्षेत्र के नामों की सूची और 1 इंगित करता है कि विशेष क्षेत्र क्वेरी परिणाम का हिस्सा है


2

छात्र का नाम

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})


1

यदि आप संग्रह में सभी 10 रिकॉर्ड के लिए फ़ील्ड "रोल" प्राप्त करना चाहते हैं। फिर यह प्रयास करें।

MongoDb में:

db.students.find ({}, {"रोल": {"$ रोल"})

Sql में:

छात्रों से रोल का चयन करें


1

मैं केवल उन उत्तरों को जोड़ना चाहता हूं जो यदि आप किसी अन्य ऑब्जेक्ट में नेस्टेड फ़ील्ड को प्रदर्शित करना चाहते हैं, तो आप निम्न सिंटैक्स का उपयोग कर सकते हैं

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

यहां कुंजी नाम की वस्तु के अंदर मौजूद है

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

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

यह इसके बराबर है -

छात्र से रोल का चयन करें



db.student.find ({}, {"रोल": 1, "नाम": 1, "_id": 0))

यह इसके बराबर है -

छात्र से रोल, नाम चुनें


0

शेल में इस तरह से क्वेरी का उपयोग करें:

1. उपयोगdatabase_name

e.g: use database_name

2. जो मिलान होने पर केवल विशेष क्षेत्र की जानकारी _id:0देता है, परिणाम में आईडी प्रदर्शित नहीं करने के लिए निर्दिष्ट करता है

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

0

Mongodb 3.4 में हम तर्क के नीचे उपयोग कर सकते हैं, मैं पिछले संस्करणों के बारे में निश्चित नहीं हूं

छात्र से रोल का चयन करें ==> db.student.find (! {}, {रोल: 1}]

उपरोक्त तर्क कुछ स्तंभों को परिभाषित करने में मदद करता है (यदि वे कम हैं)


0

MongoDB के लिए स्टूडियो 3T का उपयोग करना, अगर मैं इसका उपयोग .find({}, { _id: 0, roll: true })करता हूं तो अभी भी खाली के साथ वस्तुओं की एक सरणी लौटाता हूं_id संपत्ति के ।

जावास्क्रिप्ट का उपयोग mapकरने से मुझे केवल वांछित rollसंपत्ति को स्ट्रिंग की एक सरणी के रूप में पुनः प्राप्त करने में मदद मिली :

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

0

यकीन नहीं है कि यह सवाल का जवाब देता है, लेकिन मेरा मानना ​​है कि यह यहाँ ध्यान देने योग्य है। एकल फ़ील्ड (और एकाधिक नहीं) का उपयोग करने के लिए एक और तरीका हैdb.collection_name.distinct();

जैसे,db.student.distinct('roll',{});

या, दूसरा तरीका: का उपयोग करके db.collection_name.find().forEach();(कई क्षेत्रों का चयन यहाँ किया जा सकता है)

जैसे, db.collection_name.find().forEach(function(c1){print(c1.roll);});

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.