मेरे पास इसके समान दस्तावेजों का एक संग्रह है:

{
    Name : "Name1",
    Product : 1012,
    Titles : [ { 
         Id: 5,  
         Title: "FirstTitle" 
         }, 
         {
         Id: 75,
         Title: "SecondTitle"
         }
 },
 {
    Name : "Name1",
    Product : 2014,
    Titles : [ { 
         Id: 5,  
         Title: "FirstTitle" 
         }, 
         {
         Id: 75,
         Title: "SecondTitle"
         }
 }

मैं एक ही नाम के साथ सभी दस्तावेज़ प्राप्त करने के लिए नाम से मिलान कर रहा हूं। फिर अगर सभी मैचों में टाइटल का एक ही सेट है, तो मुझे वह सेट चाहिए।

{
    Name : "Name1,
    TitlesVaries : false
    Titles : [ { 
         Id: 5,  
         Title: "FirstTitle" 
         }, 
         {
         Id: 75,
         Title: "SecondTitle"
         }
}

अगर वे अलग हैं तो मैं यह जानना चाहता हूं।

{
    Name : "Name1"
    TitlesVaries : true
    Titles : null
}

मुझे प्रत्येक दस्तावेज़ के लिए सेट/सरणी शीर्षकों की तुलना करने में समस्या हो रही है, यह देखने के लिए कि क्या वे मेरे कुल/मिलान के बाद बिल्कुल समान हैं या नहीं। कुछ दस्तावेज़ों में शीर्षक के खाली/शून्य सरणी हो सकते हैं और यदि वे सभी खाली/शून्य हैं तो यह एक मैच है

0
TomEddie 5 पद 2020, 03:17

1 उत्तर

सबसे बढ़िया उत्तर

एकत्रीकरण हो सकता है

  • $addToSet डुप्लीकेट हटाने में मदद करता है। तो हमारे पास दो सरणी होंगी जो एक सेट (Titles) और एक मूल सरणी ('मूल') है।
  • दोनों सरणी की तुलना करें। यदि दोनों समान नहीं हैं, तो विभिन्न हैं।

स्क्रिप्ट है

db.collection.aggregate([
  {
    $group: {
      _id: "$Name",
      Titles: { $addToSet: "$Titles" },
      original: { $push: "$Titles" }
    }
  },
  {
    $project: {
      Titles: {
        $cond: [
          {
            $or: [
              {
                $ne: [
                  { $size: "$Titles" },
                  { $size: "$original" }
                ]
              },
              {
                $eq: [ {  $size: "$original"  }, 1 ]
              }
            ]
          },
          "$Titles",
          null
        ]
      },
      TitlesVaries: {
        $ne: [
          { $size: "$Titles" }, { $size: "$original" }
        ]
      }
    }
  }
])

कार्य मोंगो खेल का मैदान

1
varman 5 पद 2020, 06:37