arrays - $ एक दूसरे तर्क के रूप में एक सरणी की आवश्यकता है, पाया: लापता



mongodb mongodb-query (1)

पहला विकल्प -> एकत्रीकरण का उपयोग करें

क्योंकि आपके संग्रह में आपके कुछ दस्तावेज़ों में permissions फ़ील्ड हो सकती हैं या नहीं हो सकती हैं या यह सरणी के बराबर नहीं है, इसलिए आपको यह त्रुटि मिल रही है।

आप $type के फ़ील्ड पा सकते हैं और यदि यह आपके दस्तावेज़ में मौजूद नहीं है या नहीं है, तो आप इसे एक सरणी के रूप में $addFields और $cond एकत्रीकरण के साथ जोड़ सकते हैं

db.collection.aggregate([
  { "$addFields": {
    "permissions": {
      "$cond": {
        "if": {
          "$ne": [ { "$type": "$permissions" }, "array" ]
        },
        "then": [],
        "else": "$permissions"
      }
    }
  }},
  { "$project": {
    "filteredChildren": {
      "$filter": {
        "input": "$moduleChildren",
        "as": "moduleChild",
        "cond": {
          "$in": [ "$$moduleChild._id", "$permissions" ]
        }
      }
    }
  }}
])

दूसरा विकल्प ->

आप जिस भी GUI का उपयोग कर रहे हैं उस पर अपने mongo शेल या रोबोमोंगो पर जाएं और इस कमांड को चलाएं

db.collection.update(
  { "permissions": { "$ne": { "$type": "array" } } },
  { "$set": { "permissions": [] } },
  { "multi": true }
)

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूँ?

डीबी दस्तावेज़ संरचना:

{
    "_id" : "module_settings",
    "moduleChildren" : [
        {
            "_id" : "module_settings_general",
            "name" : "General",
        },
        {
            "_id" : "module_settings_users",
            "name" : "Users",
        },
        {
            "_id" : "module_settings_emails",
            "name" : "Emails",
        }
    ],
    permissions : [
        "module_settings_general",
        "module_settings_emails"
    ]
}

पाइपलाइन चरण:

{ $project: {
    filteredChildren: {
        $filter: {
           input: "$moduleChildren",
           as: "moduleChild",
           cond: { $in : ["$$moduleChild._id", "$permissions"] }
        }
    },
}}

मुझे केवल "मॉड्यूल" अनुमतियाँ "सरणी" में दिखाने के लिए "मॉड्यूलचिल्ड्रेन" सरणी को फ़िल्टर करने की आवश्यकता है। Ive ने "$ $ ROOT.permissions" और "$$ CURRENT.permissions" की कोशिश की, लेकिन उनमें से कोई भी काम नहीं कर रहा है। मुझे हमेशा एक त्रुटि मिलती है कि $ तर्क के रूप में अनुपलब्ध सरणी है। यह काम करता है जब मैं इस तरह सरणी hardcode: cond: { $in : ["$$moduleChild._id", [“module_settings_general", "module_settings_emails”]] } ऐसा लगता है कि समस्या सरणी के पारित होने में है। किसी भी सलाह के लिए धन्यवाद!





aggregation-framework