কোনও মঙ্গোডিবি সংগ্রহের সমস্ত নথির জন্য একটি একক ক্ষেত্র কীভাবে নির্বাচন করবেন?


223

আমার মঙ্গোডিবিতে আমার কাছে একটি ছাত্র সংগ্রহ রয়েছে যার সাথে 10 টি রেকর্ড রয়েছে nameএবং ক্ষেত্র রয়েছে roll। এই সংগ্রহের একটি রেকর্ড হ'ল:

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

আমি rollসংগ্রহের সমস্ত 10 টি রেকর্ডের জন্য ক্ষেত্রটি পুনরুদ্ধার করতে চাই কারণ আমরা ব্যবহার করে traditionalতিহ্যবাহী ডাটাবেসে করবো:

SELECT roll FROM student

আমি অনেকগুলি ব্লগ দিয়েছি তবে সবগুলিই এমন একটি ক্যোয়ারির ফলস্বরূপ যা এর অবশ্যই WHEREধারা থাকতে হবে :

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

ক্যোয়ারির সমতুল্য:

SELECT * FROM student WHERE roll > 70

আমার প্রয়োজনটি হ'ল কোনও শর্ত ছাড়াই একটি একক চাবি খুঁজে পাওয়া। সুতরাং, কি জন্য কোয়েরি অপারেশন।


@ নীললুন মঙ্গোডিবি ম্যাপিংয়ের এসকিউএল লিঙ্কের জন্য ধন্যবাদ । আমি কীভাবে মিস করেছি জানি না।
শিপ্রা

উত্তর:


255

থেকে MongoDB ডক্স :

একটি অভিক্ষেপ স্পষ্টভাবে বেশ কয়েকটি ক্ষেত্র অন্তর্ভুক্ত করতে পারে। নিম্নলিখিত ক্রিয়াকলাপে, () পদ্ধতিটি কোয়েরির সাথে মেলে এমন সমস্ত নথি ফিরিয়ে দেয়। ফলস্বরূপ, কেবলমাত্র আইটেম এবং কিউটি ক্ষেত্র এবং ডিফল্টরূপে _id ক্ষেত্রটি মিলবে নথিগুলিতে return

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
এটি গুগলের কাছে মনে হচ্ছে না, এত শট করার মতো। আপনি চান না এমন ক্ষেত্রগুলি কী আপনাকে স্পষ্টতই বাদ দিতে হবে? বলুন যে আপনি কেবল একটি ক্ষেত্র চান কিন্তু নথিতে 10 টি রয়েছে আপনাকে সেগুলির 09 টির জন্য স্পষ্টভাবে সেট করতে হবে? সম্পাদনা করুন: কিছুই নয়, বাদ দিয়ে _idঅর্থাত্ {field_I_want:1, _id:0}কাজ করে
যাচ্ছেন

আমি যদি কোনও প্রজেকশন ব্যবহার করি তবে কি কোনও ক্ষেত্র যুক্ত করা এবং তারপরে ডকটি আপডেট করা সম্ভব?
chovy

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

নাম নির্বাচন করুন, FROM শিক্ষার্থী রোল করুন


_id সহ একটি ক্ষেত্র থেকে সমস্ত ডেটা পান

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

নির্বাচন করুন আইডি, ছাত্র থেকে রোল


_আইডি ছাড়াই এক ক্ষেত্র থেকে সমস্ত ডেটা পান

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})করতে সাহায্যের জন্য ধন্যবাদ জানানো হবে ।
ব্যবহারকারী 8675309

58

আমি মনে করি mattingly890 এর সঠিক উত্তর রয়েছে, এখানে প্যাটার্ন / কম্যান্ডের পাশাপাশি আরও একটি উদাহরণ দেওয়া হয়েছে

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

এখানে চিত্র বর্ণনা লিখুন


মঙ্গো থেকে আউটপুট প্রদর্শন করতে এবং এটি উদাহরণ হিসাবে কী দেয়।
গ্রেপিট

আমি আমার উত্তরে স্ক্রিনশটটি অন্তর্ভুক্ত করেছিলাম বলেই কি আপনি আমাকে একটি ভোট দিয়েছেন?
গ্রেপিট

হ্যাঁ, এবং কারণ আমিও দেখতে পাচ্ছি না যে আপনার উত্তরটি @ থেরিয়ালোটুউসার এর অ্যাওয়ার থেকে নতুন কী নিয়ে আসে
গিলিয়াম

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
আমি মনে করি আপনার উল্লিখিত কমান্ডগুলি মঙ্গুজ থেকে এসেছে এবং তৃতীয়টি বাদে মংডব নয়।
আশীষ

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

যদিও gowtham এর উত্তর সম্পূর্ণ হলে, এটা লক্ষণীয় যে, ঐ কমান্ড (মোঙ্গো এর শেল ব্যবহার করছেন না তাদের জন্য) অন্য API- এর উপর থেকে ভিন্ন হতে পারে মূল্য।
পড়ুন দয়া করে ডকুমেন্টেশন লিংক বিস্তারিত তথ্যের জন্য।

উদাহরণস্বরূপ, নোডেজগুলির কাছে একটি পদ্ধতি রয়েছে `প্রজেকশন যা আপনি প্রজেক্ট করার জন্য আপনার অনুসন্ধানের ফাংশনে যুক্ত হন।

একই উদাহরণ সেট অনুসরণ করে, নীচের মত আদেশগুলি নোডের সাথে ব্যবহার করা যেতে পারে:

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

নির্বাচন করুন _id, FROM ছাত্র রোল

অথবা
db.student.find({}).project({roll:1, _id: 0})

শিক্ষার্থী থেকে রোল নির্বাচন করুন

ইত্যাদি।

নোডেজ ব্যবহারকারীদের জন্য আবারও toArrayআপনার .thenকমান্ড যুক্ত করার জন্য ভুলে যাবেন না (যদি আপনি আগে এই API টি ব্যবহার করেন তবে আপনার কী ইতিমধ্যে পরিচিত হওয়া উচিত) ।


4

আরও ভাল বোঝার জন্য আমি একই মাইএসকিউএল কোয়েরি লিখেছি।

Selecting specific fields 

মঙ্গোডিবি : db.collection_name.find ({}, {নাম: সত্য, ইমেল: সত্য, ফোন: সত্য});

মাইএসকিউএল: নাম, ইমেল, ফোন থেকে টেবিলের নাম নির্বাচন করুন;

Selecting specific fields with where clause

মঙ্গোডিবি : db.collection_name.find ({ইমেল:'you@email.com '}, {নাম: সত্য, ইমেল: সত্য, ফোন: সত্য});

মাইএসকিউএল: নাম, ইমেল, ফোন থেকে নির্বাচন করুন টেবিলের নাম_একটি ইমেল = '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 টি রেকর্ডের জন্য ক্ষেত্রটি "রোল" পুনরুদ্ধার করতে চান। তারপরে এটি চেষ্টা করুন।

মঙ্গোডিবিতে:

db.students.find ({}, roll "রোল": {"$ রোল"})

স্কোলে:

শিক্ষার্থীদের থেকে রোল নির্বাচন করুন


1

আমি কেবল উত্তরগুলিতে যুক্ত করতে চাই যে আপনি যদি অন্য কোনও বস্তুর নীড়যুক্ত একটি ক্ষেত্র প্রদর্শন করতে চান তবে আপনি নীচের বাক্য গঠনটি ব্যবহার করতে পারেন

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

এখানে বস্তু নামক বস্তুর ভিতরে কী উপস্থিত রয়েছে

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

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

এটি সমান -

ছাত্র থেকে রোল নির্বাচন করুন



db.student.find ({}, roll "রোল": 1, "নাম": 1, "_ আইডি": 0})

এটি সমান -

ছাত্র থেকে রোল, নাম নির্বাচন করুন


0

শেলের মধ্যে এই জাতীয় কোয়েরি ব্যবহার করুন:

1. ব্যবহার করুনdatabase_name

e.g: use database_name

২. যা মেলে যখন কেবল সম্পদ নির্দিষ্ট ক্ষেত্রের তথ্য _id:0দেয়, ফলাফল আইডি প্রদর্শন না করার জন্য নির্দিষ্ট করে

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

0

মঙ্গডব ৩.৪-তে আমরা নীচে যুক্তি ব্যবহার করতে পারি, আমি পূর্ববর্তী সংস্করণগুলি সম্পর্কে নিশ্চিত নই

শিক্ষার্থী থেকে রোল নির্বাচন করুন ==> db.student.find (! {{}, {রোল: 1})

উপরের যুক্তিটি কিছু কলাম সংজ্ঞায়িত করতে সহায়তা করে (যদি সেগুলি কম হয়)


0

মঙ্গোডিবির জন্য স্টুডিও 3 টি ব্যবহার করে, যদি আমি .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

নিশ্চিত নয় যে এটি প্রশ্নের উত্তর দিয়েছে তবে আমি বিশ্বাস করি এটি এখানে উল্লেখ করার মতো। একক ক্ষেত্র নির্বাচন করার জন্য আরও একটি উপায় রয়েছে (এবং একাধিক নয়) usingdb.collection_name.distinct();

যেমন,db.student.distinct('roll',{});

অথবা, দ্বিতীয় উপায়: ব্যবহার করে db.collection_name.find().forEach();(একাধিক ক্ষেত্রগুলি এখানে সংক্ষিপ্তকরণের মাধ্যমে নির্বাচন করা যেতে পারে)

যেমন, db.collection_name.find().forEach(function(c1){print(c1.roll);});

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.