মোঙ্গো কনসোলে আমি কীভাবে তার অবজেক্টআইডি দ্বারা কোনও বিষয় অনুসন্ধান করব?


265

আমি সি # এবং পার্লের জন্য এই প্রশ্নের উত্তর পেয়েছি, তবে নেটিভ ইন্টারফেসে নেই। আমি ভেবেছিলাম এটি কার্যকর হবে:

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

ক্যোয়ারী কোনও ফলাফল দেয়নি। আমি 4Cbe7f9e8c1c9092c000027 পেয়েছি এবং একটি অবজেক্টআইডি ধরলাম db.theColl.find()। সংগ্রহে রয়েছে কয়েক হাজার অবজেক্ট।

আমি mongodb.org ওয়েবসাইটে যে পৃষ্ঠাগুলি খুঁজে পেতে পেরেছিলাম তা খুঁজে পেয়েছি এবং এটি খুঁজে পেল না। এটি কি কেবল একটি আশ্চর্যজনক কাজ? এটা আমার কাছে বেশ স্বাভাবিক মনে হচ্ছে।

উত্তর:


416

মোটেও আশ্চর্যজনক নয়, লোকেরা এটি সর্বদা করে। সংগ্রহের নামটি সঠিক (কেস সম্পর্কিত বিষয়) এবং অবজেক্টআইডি সঠিক কিনা তা নিশ্চিত করুন।

ডকুমেন্টেশন এখানে

> db.test.insert({x: 1})

> db.test.find()                                               // no criteria
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }      

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))           // shortcut
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

1
আশ্চর্যের বিষয়, আমি আমার কনসোলটি পুনরায় শুরু করেছি এবং এটি হঠাৎ করে কাজ করে। কমান্ড লাইনে আপনার "সুযোগ" বা কিছু পরিবর্তন করার উপায় আছে এবং এটি সত্যই জানে না?
jcollum

আশ্চর্যের কিছু নেই: যখন আমি 'অবজেক্ট আইডি' অনুসন্ধান করি তখন সেই পৃষ্ঠাটি আসে নি: mongodb.org/…
jcollum

1
হ্যাঁ, আপনি দুর্ঘটনাক্রমে "ইউজ ডিবি নাম" টাইপ করেছেন এবং ডেটাবেস স্যুইচ করেছেন। আমি ধরে নিচ্ছি আপনি অনুলিপি বা শার্পিং ব্যবহার করছেন না, এটি কেন প্রদর্শিত হচ্ছে না তা স্পষ্টতই অন্যান্য সম্ভাবনা তৈরি করবে।
টাইলার ব্রক

1
সমস্যাটি হ'ল আমি আমার _ আইডের চারপাশে উদ্ধৃতি দিচ্ছি না।
jcollum

9
বাহ, আমার ধারণা ছিল না যে এটি মঙ্গোডিবিতে আমার বিশেষ সমস্যাটি অন্যত্র রয়েছে তা ভেবে কিছুটা সময় নষ্ট করেছিল, তবে এটির সন্ধানের জন্য কেবল অতিরিক্ত নিয়ম দরকার। এক্সপ্রেস এবং নোড ব্যবহার করে লোকেরা কী প্রয়োজন তার জন্য প্রয়োজন অবজেক্টআইড এক্সপ্রেস ... var অবজেক্টআইডি = প্রয়োজন ('মংডোব')। অবজেক্টআইডি;
ক্রিস হকস

87

আপনি যদি নোড.জেএস ব্যবহার করছেন:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;       
> var o_id = new ObjectId(id);
> db.test.find({_id:o_id})

সম্পাদনা: নতুন অবজেক্টআইডি (আইডি) এ সংশোধন করা হয়েছে, নতুন অবজেক্টআইডি (আইডি) নয়


5
import { ObjectId } from "mongodb";fancier জেএস জন্য কাজ করে।
নেটওপ্রেটার উইববি

84

এমনকি সহজ, বিশেষত ট্যাব সমাপ্তির সাথে:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))

সম্পাদনা: findOneপ্রিটিয়ার আউটপুট জন্য কমান্ডের সাথেও কাজ করে ।


যদি আমরা একাধিক অবজেক্ট আইডির সাথে সন্ধান করতে চাই ঠিক একইভাবে আমরা যেখানে mysql- এ শর্তটি প্রয়োগ করি।
প্রাতসুইনজ

TypeError: এই আমাকে একটি ত্রুটি দেয় ফিল্টার অভি, bson.son.SON, বা অন্যান্য ধরনের একটি দৃষ্টান্ত হতে হবে যে collections.Mapping থেকে উত্তরাধিকারী
ডেভিড Okwii

1
@ ডেভিডকুইই - এই উদাহরণটি মঙ্গোশেলের পক্ষে। দেখে মনে হচ্ছে আপনি পাইথন থেকে db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
ছুটে চলেছেন, সেক্ষেত্রে আপনি এর

এটি ভুল, কোনও db.test.findOneAndDelete(ObjectId('57eujhs76e7hs877e868'))কমান্ডে এই পদ্ধতির ব্যবহারটি একটি নথি মুছে ফেলবে এমনকি যদি ObjectId নির্দিষ্ট আইডির সাথে মেলে না। আপনাকে যথাযথভাবে এটি নির্দিষ্ট করতে হবেdb.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
ড্যানি সোফটি

1
এই প্রশ্নটি সম্পর্কে ছিল, সম্পর্কে find()নয় findOneAndDelete()
এমপ্ল্যানচার্ড

18

আপনি ডাবল উক্তি সন্নিবেশ করতে মিস করেছেন। একদম জিজ্ঞাসা হ'ল

db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )

"বিষয়টি হ'ল আমি আমার _ আইডির আশেপাশে উদ্ধৃতি দিচ্ছি না।" - ডিসেম্বর 7 2011, প্রথম উত্তরের মন্তব্যগুলি দেখুন
jcollum

@ জ্যাকলুম একটি আপডেট হিসাবে, আপনি এখন যে প্রশ্নের সন্ধান করেছিলেন তা _id এর আশেপাশে উদ্ধৃতি ব্যতীত বৈধ হবে।
এনিম্যাল টেস্টিং

4

আপনি যদি মঙ্গো শেলের উপর কাজ করে থাকেন তবে দয়া করে এটি উল্লেখ করুন: টাইলার ব্রোকের উত্তর

আপনি উত্তরটি নোড.জেএস ব্যবহার করে যদি মঙ্গডব ব্যবহার করে থাকেন তবে আমি উত্তরটি লিখেছিলাম

আপনার আইডি রূপান্তর করতে হবে না ObjectId। শুধু ব্যবহার করুন:

db.collection.findById('4ecbe7f9e8c1c9092c000027');

এই সংগ্রহের পদ্ধতিটি স্বয়ংক্রিয়ভাবে আইডিটিকে অবজেক্টআইডিতে রূপান্তর করবে।

অন্য দিকে :

db.collection.findOne({"_id":'4ecbe7f9e8c1c9092c000027'})প্রত্যাশার মতো কাজ করে না আপনি ম্যানুয়ালি আইডি রূপান্তর করেছেন ObjectId

এটি এইভাবে করা যেতে পারে:

let id = '58c85d1b7932a14c7a0a320d';

let o_id = new ObjectId(id);   // id as a string is passed

db.collection.findOne({"_id":o_id});

ফাইন্ডবাইআইডিটি মঙ্গুসের একটি ফাংশন / পদ্ধতি হওয়া উচিত - যেখানে এটি অভ্যন্তরীণভাবে স্ট্রিংটিকে অবজেক্টআইডে রূপান্তর করে, আপনি যদি মঙ্গুজ ব্যবহার না করেন তবে এই কোডটি আপনাকে নোড বা অন্য কোনওভাবে সহায়তা করে না .. !!
হোয়ামি

1
হ্যাঁ..আমি ভুলে গিয়েছিলাম যে মঙ্গুসের দরকার আছে ..... সংশোধনের জন্য আপনাকে ধন্যবাদ
সৌরভ গুপ্ত

3

আমার কেবল এই সমস্যাটি ছিল এবং ডকুমেন্ট অনুযায়ী ঠিক তাই করছিলাম এবং এটি এখনও কাজ করছে না।

আপনার ত্রুটির বার্তাটি দেখুন এবং নিশ্চিত করুন যে আপনার কোনও বিশেষ অক্ষর অনুলিপি করা নেই। আমি ত্রুটিটি পাচ্ছিলাম

SyntaxError: illegal character @(shell):1:43

আমি যখন 43-এর চরিত্রে গিয়েছিলাম তখন এটি আমার আইডির শুরু, উন্মুক্ত উদ্ধৃতিগুলির পরে, ঠিক যেমনটি আমি এটিতে আটকালাম there সেখানে আমি আমার কার্সারটি রেখেছিলাম এবং ব্যাকস্পেসে আঘাত করলে কিছুই হ'ল না যখন এটি উন্মুক্ত উদ্ধৃতিটি সরিয়ে নেওয়া উচিত ছিল। আমি আবার ব্যাকস্পেসে আঘাত করেছি এবং এটি উন্মুক্ত উদ্ধৃতিটি সরিয়ে ফেলেছে, তারপরে আমি উদ্ধৃতিটি পিছনে ফেলেছি এবং ক্যোয়ারীটি কার্যকর করেছিলাম এবং ঠিক একই রকম সত্ত্বেও এটি কাজ করে।

আমি ওয়েবম্যাট্রিক্সে উন্নয়ন করছিলাম এবং কনসোল থেকে অবজেক্ট আইডি অনুলিপি করছিলাম। আপনি যখনই ওয়েবম্যাট্রিক্সে কনসোলটি অনুলিপি করেন তখন আপনি কিছু অদৃশ্য অক্ষর বাছাই করতে পারেন যা ত্রুটির কারণ হতে পারে।


3

একবার আপনি মঙ্গো সিএলআই খুললেন, সংযুক্ত এবং সঠিক ডাটাবেসে অনুমোদিত authorized

নীচের উদাহরণটি কীভাবে "পণ্যগুলি" নামক সংগ্রহ থেকে _id = 568c28fffc4be30d44d0398e দিয়ে দস্তাবেজটি সন্ধান করতে পারে তা দেখায় :

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})

2

মঙ্গোডিবি স্টিচ ফাংশনে এটি নীচের মতো বিএসওএন ব্যবহার করে করা যেতে পারে :

ব্যবহার করুন ObjectIdনীচের উদাহরণে মত এই কাজের জন্য BSON ইউটিলিটি প্যাকেজের মধ্যে সাহায্যকারী:

var id = "5bb9e9f84186b222c8901149";  
BSON.ObjectId(id);

1

আমি মনে করি আপনি আরও ভাল কিছু লিখুন:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})

এই কোডটি প্রশ্নের উত্তর দেয় কীভাবে আপনি কিছুটা ব্যাখ্যা করতে পারেন?
4

-1

অবজেক্টড পদ্ধতি ব্যবহার করার জন্য আপনাকে এটিকে আমদানি করতে হবে না। এটি ইতিমধ্যে মঙ্গোদব অবজেক্টে রয়েছে।

var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d');
db.yourCollection.findOne({ _id: ObjectId }, function (err, info) {
   console.log(info)
});
               


1
নাঃ:TypeError: db.ObjectId is not a function
jorisw

এটি ঠিকObjectId("SOMETHING")
বেন সিনক্লেয়ার

-1

আপনি যদি নোড.জেএস ব্যবহার করছেন:

সেই req.user এ অবজেক্টআইডি ফর্ম্যাট।

var mongoose = require("mongoose");
var ObjectId = mongoose.Schema.Types.ObjectId;

function getUsers(req, res)
    User.findOne({"_id":req.user}, { password: 0 }) 
         .then(data => { 
             res.send(data);})g
}
exports.getUsers = getUsers;

-5

সহজভাবে করুন:

db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');

Mongo Shellসংস্করণ 3.2.7 থেকে এটি আমার পক্ষে কাজ করবে না ।
Amio.io

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