Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में फील्ड प्रोजेक्ट करना

MongoDB एग्रीगेशन में $project और $cond का उपयोग करके डायनामिक फील्ड प्रोजेक्शन

MongoDB में जब दस्तावेज़ों में अलग-अलग फील्ड नाम हों (जैसे Marks1/Score1), तो $project के साथ $cond और $ifNull का उपयोग करके एकीकृत स्कीमा में प्रोजेक्ट करें।

उदाहरण: संग्रह और दस्तावेज़ बनाना

> db.demo439.insertOne({
  "Name" : "Chris",
  "MarksInformation" : { "Marks1" : 67, "Marks2" :45, "Marks3" : 78 }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e77833abbc41e36cc3caeab") }
> db.demo439.insertOne({
  "Name" : "David",
  "MarksInformation" : { "Marks1" : 50, "Marks2" :57, "Marks3" : 68 }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e77833abbc41e36cc3caeac") }
> db.demo439.insertOne({
  "Name" : "Bob",
  "MarksInformation" : { "Score1" : 65, "Score2" :71 }
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e77833bbbc41e36cc3caead") }

सभी दस्तावेज़ देखना

> db.demo439.find();

आउटपुट:

{ "_id" : ObjectId("5e77833abbc41e36cc3caeab"), "Name" : "Chris", "MarksInformation" : { "Marks1" : 67, "Marks2" : 45, "Marks3" : 78 } }
{ "_id" : ObjectId("5e77833abbc41e36cc3caeac"), "Name" : "David", "MarksInformation" : { "Marks1" : 50, "Marks2" : 57, "Marks3" : 68 } }
{ "_id" : ObjectId("5e77833bbbc41e36cc3caead"), "Name" : "Bob", "MarksInformation" : { "Score1" : 65, "Score2" : 71 } }

एकीकृत फील्ड्स (Marks1, Marks2, Marks3) में प्रोजेक्ट करना

> db.demo439.aggregate({
  $project: {
    "Name" : 1,
    "Marks1": { 
      $cond: [ 
        { $eq:[ { $ifNull: [ "$MarksInformation.Marks1", 0 ] }, 0 ] },
        { $ifNull: [ "$MarksInformation.Score1", 0 ] },
        "$MarksInformation.Marks1" 
      ] 
    },
    "Marks2": { 
      $cond: [ 
        { $eq:[ { $ifNull: [ "$MarksInformation.Marks2", 0 ] }, 0 ] },
        { $ifNull: [ "$MarksInformation.Score2", 0 ] },
        "$MarksInformation.Marks2" 
      ] 
    },
    "Marks3": { 
      $cond: [ 
        { $eq:[ { $ifNull: [ "$MarksInformation.Marks3", 0] }, 0 ] },
        { $ifNull: [ "$MarksInformation.Score3", 0 ] },
        "$MarksInformation.Marks3" 
      ] 
    }
  }
})

आउटपुट:

{ "_id" : ObjectId("5e77833abbc41e36cc3caeab"), "Name" : "Chris", "Marks1" : 67, "Marks2" : 45, "Marks3" : 78 }
{ "_id" : ObjectId("5e77833abbc41e36cc3caeac"), "Name" : "David", "Marks1" : 50, "Marks2" : 57, "Marks3" : 68 }
{ "_id" : ObjectId("5e77833bbbc41e36cc3caead"), "Name" : "Bob", "Marks1" : 65, "Marks2" : 71, "Marks3" : 0 }

लॉजिक व्याख्या:

  • $ifNull: ["$MarksInformation.Marks1", 0] - Marks1 मौजूद तो उसका मान, अन्यथा 0
  • $eq: [..., 0] - यदि परिणाम 0 है (फील्ड गायब या 0)
  • तो $ifNull: ["$MarksInformation.Score1", 0] उपयोग करें (फॉलबैक)
  • अन्यथा मूल $MarksInformation.Marks1 उपयोग करें

सरल विकल्प (MongoDB 3.6+): $switch

Marks1: {
  $switch: {
    branches: [
      { case: { $ne: ["$MarksInformation.Marks1", null] }, then: "$MarksInformation.Marks1" },
      { case: { $ne: ["$MarksInformation.Score1", null] }, then: "$MarksInformation.Score1" }
    ],
    default: 0
  }
}

उपयोग के मामले: स्कीमा माइग्रेशन, बहु-संस्करण डेटा, असंरचित डेटा सामान्यीकरण।

  1. - MongoDB एग्रीगेशन में $project और $filter का उपयोग करके सरणी फ़ील्ड के विशिष्ट तत्व प्रोजेक्ट करना

    MongoDB में $project + $filter: सरणी से शर्त-आधारित प्रोजेक्शन $project स्टेज के भीतर $filter का उपयोग करके सरणी फ़ील्ड को नई सरणी से बदलें जिसमें केवल शर्त पूरी करने वाले तत्व हों। यह दस्तावेज़ संरचना को आकार देने का शक्तिशाली तरीका है। नमूना डेटा > db.demo355.insertOne({id: 101, details: [{Nam

  1. - MongoDB में विशिष्ट फील्ड द्वारा खोज कैसे करें?

    MongoDB में एक या अधिक फील्ड्स पर दस्तावेज़ फ़िल्टर करने के लिए, find() के साथ क्वेरी ऑब्जेक्ट का उपयोग करें। कई शर्तों को संयोजित करने के लिए $or, $and का उपयोग करें। उदाहरण: नाम और देश वाले दस्तावेज़ > db.demo371.insertOne({Name:David,CountryName:US}); { acknowledged : true, insertedId : Objec

  1. - MongoDB में _id फील्ड छिपाएं

    आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo575.insertOne({id:101,Information:{Name:Chris,Age:21}}); { acknowledged : true, insertedId : ObjectId(5e916a55581e9acd78b427f7) } > db.demo575.insertOne({id:102,Information:{Name:David,Age:20}}); { acknowledged : true, insertedId : ObjectId