Node.js MongoDB Find

Node.js MongoDB

ভূমিকা

MongoDB-তে একটি সংগ্রহে ডেটা খুঁজতে আমরা find and findOne পদ্ধতি ব্যবহার করি।

ঠিক যেমন SELECT স্টেটমেন্টটি একটি MySQL ডাটাবেসের একটি টেবিলে ডেটা খুঁজে পেতে ব্যবহৃত হয়।

findOne()

শুধুমাত্র প্রথম ম্যাচেই ফিরেছেন

  • একটি একক নথি
  • দ্রুত সনাক্তকরণ
  • নির্দিষ্ট রেকর্ড

find()

সব ম্যাচ ফেরত দেয়

  • অনেক নথি
  • সম্পূর্ণ সংগ্রহ
  • বিস্তারিত ফলাফল

একটি খুঁজে বের করা

MongoDB-তে একটি সংগ্রহ থেকে ডেটা নির্বাচন করতে, আমরা findOne() পদ্ধতি ব্যবহার করতে পারি।

FindOne() পদ্ধতি নির্বাচনের প্রথম ঘটনাটি প্রদান করে।

findOne() পদ্ধতির প্রথম প্যারামিটার হল একটি কোয়েরি অবজেক্ট। এই উদাহরণে আমরা একটি খালি ক্যোয়ারী অবজেক্ট ব্যবহার করি যা একটি সেটের সমস্ত নথি নির্বাচন করে (কিন্তু শুধুমাত্র প্রথম নথি প্রদান করে)।

উদাহরণ

গ্রাহকদের সংগ্রহে প্রথম নথিটি খুঁজুন:

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").findOne({}, function(err, result) {
    if (err) throw err;
    console.log(result.name);
    db.close();
  });
});

উপরের কোডটি "demo_mongodb_findone.js" ফাইলে সংরক্ষণ করুন এবং ফাইলটি চালান:

C:\Users\Your Name>node demo_mongodb_findone.js

এটি আপনাকে এই ফলাফল দেবে:

Company Inc.

সবকিছু খুঁজে

MongoDB-তে একটি টেবিল থেকে ডেটা নির্বাচন করতে আমরা find() পদ্ধতিও ব্যবহার করতে পারি।

find() পদ্ধতি নির্বাচনের সমস্ত ঘটনা ফেরত দেয়।

find() পদ্ধতির প্রথম প্যারামিটার হল একটি কোয়েরি অবজেক্ট। এই উদাহরণে আমরা একটি খালি ক্যোয়ারী অবজেক্ট ব্যবহার করি যা সংগ্রহের সমস্ত নথি নির্বাচন করে।

Find() পদ্ধতিতে MySQL-এ SELECT * এর মতো কোনো প্যারামিটার নেই।

উদাহরণ

গ্রাহকদের প্যাকেজে সমস্ত নথি খুঁজুন:

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

উপরের কোডটি "demo_mongodb_find.js" ফাইলে সংরক্ষণ করুন এবং ফাইলটি চালান:

C:\Users\Your Name>node demo_mongodb_find.js

এটি আপনাকে এই ফলাফল দেবে:

[
  { _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
  { _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
  { _id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy', address: 'Apple st 652'},
  { _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address: 'Mountain 21'},
  { _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael', address: 'Valley 345'},
  { _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy', address: 'Ocean blvd 2'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8a , name: 'Betty', address: 'Green Grass 1'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard', address: 'Sky st 331'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan', address: 'One way 98'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Vicky', address: 'Yellow Garden 2'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38'},
  { _id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'William', address: 'Central st 954'},
  { _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'Chuck', address: 'Main Road 989'},
  { _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway 1633'}
]

কিছু খোঁজা

find() পদ্ধতির দ্বিতীয় প্যারামিটার হল একটি প্রজেকশন অবজেক্ট যা ফলাফলে যোগ করার জন্য ক্ষেত্রগুলি বর্ণনা করে।

এই প্যারামিটারটি ঐচ্ছিক, এবং যদি বাদ দেওয়া হয়, ফলাফলের সাথে সমস্ত ক্ষেত্র যুক্ত করা হবে।

উদাহরণ

গ্রাহকদের সংগ্রহে থাকা সমস্ত নথির "নাম" এবং "ঠিকানা" ক্ষেত্রগুলি ফেরত দিন:

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { _id: 0, name: 1, address: 1 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

উপরের কোডটি "demo_mongodb_find_fields.js" ফাইলে সংরক্ষণ করুন এবং ফাইলটি চালান:

C:\Users\Your Name>node demo_mongodb_find_fields.js

এটি আপনাকে এই ফলাফল দেবে:

[
  { name: 'John', address: 'Highway 71'},
  { name: 'Peter', address: 'Lowstreet 4'},
  { name: 'Amy', address: 'Apple st 652'},
  { name: 'Hannah', address: 'Mountain 21'},
  { name: 'Michael', address: 'Valley 345'},
  { name: 'Sandy', address: 'Ocean blvd 2'},
  { name: 'Betty', address: 'Green Grass 1'},
  { name: 'Richard', address: 'Sky st 331'},
  { name: 'Susan', address: 'One way 98'},
  { name: 'Vicky', address: 'Yellow Garden 2'},
  { name: 'Ben', address: 'Park Lane 38'},
  { name: 'William', address: 'Central st 954'},
  { name: 'Chuck', address: 'Main Road 989'},
  { name: 'Viola', address: 'Sideway 1633'}
]

⚠️অভিক্ষেপ নিয়ম:

  • একই বস্তুতে 0 এবং 1 মান নির্দিষ্ট করার অনুমতি নেই (_id ক্ষেত্র বাদে)।
  • আপনি যদি 0 এর মান সহ একটি ক্ষেত্র নির্দিষ্ট করেন তবে অন্যান্য সমস্ত ক্ষেত্র 1 এর মান পাবে
  • আপনি যদি 1 এর মান সহ একটি ক্ষেত্র নির্দিষ্ট করেন তবে অন্যান্য সমস্ত ক্ষেত্র 0 এর মান পাবে
  • _id ক্ষেত্রটি বাদ দিতে, এর মান 0 এ সেট করুন

অতিরিক্ত প্রজেকশন উদাহরণ

"ঠিকানা" ক্ষেত্র বাদ দিয়ে

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { address: 0 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

শুধুমাত্র "নাম" ক্ষেত্র রিটার্নিং

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { _id: 0, name: 1 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

_id ক্ষেত্র ব্যতীত সমস্ত ক্ষেত্র ফেরত দেওয়া হচ্ছে

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { _id: 0 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

ত্রুটি উদাহরণ (0 এবং 1 একসাথে)

let MongoClient = require('mongodb').MongoClient;
let url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  let dbo = db.db("mydb");
  dbo.collection("customers").find({}, { projection: { name: 1, address: 0 } }).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});

উপসংহার মানে

আপনি উপরের উদাহরণের ফলাফল থেকে দেখতে পাচ্ছেন, ফলাফলটিকে একটি অ্যারেতে রূপান্তরিত করা যেতে পারে যেখানে প্রতিটি নথিকে একটি অবজেক্ট হিসাবে রয়েছে।

উদাহরণস্বরূপ, তৃতীয় নথির ঠিকানা ফেরত দিতে, তৃতীয় সারির বস্তুর ঠিকানা বৈশিষ্ট্য উল্লেখ করুন:

উদাহরণ

তৃতীয় নথির রিটার্ন ঠিকানা:

console.log(result[2].address);

এটি এই ফলাফল তৈরি করবে:

Apple st 652

আধুনিক খুঁজুন উদাহরণ

আধুনিক অ্যাসিঙ্ক/ওয়েট সিনট্যাক্স

const { MongoClient } = require('mongodb');

async function findDocuments() {
  const uri = "mongodb://localhost:27017/";
  const client = new MongoClient(uri);

  try {
    await client.connect();
    const database = client.db("mydb");
    const collection = database.collection("customers");
    
    // Find first document
    const firstDoc = await collection.findOne({});
    console.log("First document:", firstDoc);
    
    // Find all documents
    const allDocs = await collection.find({}).toArray();
    console.log("All documents:", allDocs.length);
    
    // Find with projection
    const projectedDocs = await collection.find({}, {
      projection: { _id: 0, name: 1, address: 1 }
    }).toArray();
    console.log("Projected documents:", projectedDocs);
    
  } catch (err) {
    console.error("Error finding documents:", err);
  } finally {
    await client.close();
  }
}

findDocuments();

সেরা অভ্যাস খুঁজুন

কর্মক্ষমতা

  • শুধুমাত্র প্রয়োজনীয় ক্ষেত্র নির্বাচন করুন
  • সূচী কলাম ক্যোয়ারী
  • বড় ফলাফল সেটের জন্য LIMIT ব্যবহার করুন
  • অপ্রয়োজনীয় ডেটা নির্বাচন করা এড়িয়ে চলুন

কোড গুণমান

  • সঠিক ত্রুটি হ্যান্ডলিং এবং ট্র্যাকিং ব্যবহার করুন
  • আধুনিক অ্যাসিঙ্ক/ওয়েট সিনট্যাক্স ব্যবহার করুন
  • পড়ার জন্য প্রশ্ন তৈরি করুন
  • পুনঃব্যবহারের জন্য ফাইন্ড ফাংশন তৈরি করুন

ডেটা অ্যাক্সেস

  • প্রয়োজন হিসাবে findOne() বা find() ব্যবহার করুন
  • প্রজেকশন দিয়ে ডেটা ট্র্যাফিক হ্রাস করুন
  • ফলাফল নিরীক্ষণ
  • তথ্য বিন্যাস বিবেচনা করুন

সম্পূর্ণ উদাহরণ

একটি সম্পূর্ণ উদাহরণ যা সমস্ত অনুসন্ধান কৌশল অন্তর্ভুক্ত করে:

const { MongoClient } = require('mongodb');

class DataFinder {
  constructor(connectionString, dbName) {
    this.connectionString = connectionString;
    this.dbName = dbName;
    this.client = new MongoClient(connectionString);
  }

  async connect() {
    try {
      await this.client.connect();
      console.log("Connected to MongoDB server");
      this.database = this.client.db(this.dbName);
      return true;
    } catch (error) {
      console.error("Connection failed:", error);
      return false;
    }
  }

  async findFirst(collectionName, query = {}) {
    try {
      const collection = this.database.collection(collectionName);
      const result = await collection.findOne(query);
      return result;
    } catch (error) {
      console.error("Error finding first document:", error);
      throw error;
    }
  }

  async findAll(collectionName, query = {}, projection = {}) {
    try {
      const collection = this.database.collection(collectionName);
      const cursor = collection.find(query, { projection });
      const result = await cursor.toArray();
      return result;
    } catch (error) {
      console.error("Error finding all documents:", error);
      throw error;
    }
  }

  async findWithLimit(collectionName, limit = 10, query = {}, projection = {}) {
    try {
      const collection = this.database.collection(collectionName);
      const cursor = collection.find(query, { projection }).limit(limit);
      const result = await cursor.toArray();
      return result;
    } catch (error) {
      console.error("Error finding with limit:", error);
      throw error;
    }
  }

  async close() {
    try {
      await this.client.close();
      console.log("Connection closed");
    } catch (error) {
      console.error("Error closing connection:", error);
    }
  }
}

// Usage example
async function main() {
  const connectionString = "mongodb://localhost:27017/";
  const dbName = "mydb";
  
  const finder = new DataFinder(connectionString, dbName);

  try {
    const connected = await finder.connect();
    if (!connected) return;

    // Find first document
    const firstCustomer = await finder.findFirst("customers");
    console.log("First customer:", firstCustomer);

    // Find all documents with projection
    const allCustomers = await finder.findAll("customers", {}, { 
      projection: { _id: 0, name: 1, address: 1 } 
    });
    console.log("All customers (projected):", allCustomers);

    // Find with limit
    const limitedCustomers = await finder.findWithLimit("customers", 5);
    console.log("First 5 customers:", limitedCustomers);

    console.log("All find operations completed successfully!");
    
  } catch (error) {
    console.error("Main function error:", error);
  } finally {
    await finder.close();
  }
}

// Run the example
main();

অনুশীলন করুন

MongoDB-তে, আমরা সংগ্রহ থেকে ডেটা নির্বাচন করতে ______ পদ্ধতি ব্যবহার করি।

নির্বাচন করুন এবং সমস্ত নির্বাচন করুন
✗ ভুল! SELECT এবং SELECT ALL হল SQL-এ ব্যবহৃত স্টেটমেন্ট, MongoDB পদ্ধতিতে নয়
পান এবং সব পান
✗ ভুল! GET এবং GET ALL মঙ্গোডিবি-তে বৈধ পদ্ধতি নয়
খুঁজুন এবং একটি খুঁজুন
✓ ঠিক আছে! MongoDB-তে, আমরা একটি সংগ্রহ থেকে ডেটা নির্বাচন করতে find and findOne পদ্ধতি ব্যবহার করি। findOne একটি নথি প্রদান করে, একাধিক নথি প্রদান করে
QUERY এবং FETCH
✗ ভুল! QUERY এবং FETCH MongoDB-তে বৈধ পদ্ধতি নয়