MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नेस्टेड सरणी में पहला तत्व खोजें जो शर्तों से मेल खाता हो

$where का इस्तेमाल करके शायद सर्च करना सबसे अच्छा है सामान्य क्वेरी के अलावा, और अभी भी सर्वर पर चीजें रखें:

db.getCollection('collection').find({
  "array": {
    "$elemMatch": { "field": "BCD", "enabled": "true" },
  },
  "$where": function() {
    return this.array.map((e,i) => Object.assign(e,{ i }))
      .filter( e => e.field === "BCD" && e.enabled === "true" )
      .map( e => e.i )[0] <=
    this.array.map(e => e.enabled).indexOf("true")
  }  
})

और अगर आपके पास $indexOfArray के समर्थन के साथ MongoDB 3.4 है। कोड> और $range , तो यह लंबा लग सकता है लेकिन यह वास्तव में $redact :

db.getCollection('collection').aggregate([
  { "$match": {
    "array": {
      "$elemMatch": { "field": "BCD", "enabled": "true" },
    }
  }},
  { "$redact": {
    "$cond": {  
      "if": {
        "$lte": [
          { "$arrayElemAt": [
            { "$map": {
              "input": {
                "$filter": {
                  "input": {
                    "$map": {
                      "input": {
                        "$zip": {
                          "inputs": [
                            "$array",
                            { "$range": [0, { "$size": "$array" }] }
                          ]
                        }    
                      },
                      "as": "a",
                      "in": {
                        "field": { "$arrayElemAt": [ "$$a.field", 0 ] },
                        "enabled": { "$arrayElemAt": [ "$$a.enabled", 0 ] },
                        "index": { "$arrayElemAt": [ "$$a", 1 ] }    
                      }
                    }
                  },
                  "as": "a",
                  "cond": {
                    "$and": [
                      { "$eq": [ "$$a.field", "BCD" ] },
                      { "$eq": [ "$$a.enabled", "true" ] }
                    ]
                  }    
                }
              },
              "as": "a",
              "in": "$$a.index"  
            }},
            0
          ]},
          { "$indexOfArray": [ "$array.enabled", "true" ] } 
        ] 
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

तो वास्तव में कोई वास्तविक क्वेरी ऑपरेशन नहीं है जो इसे लागू करता है, लेकिन ये दोनों मामले क्लाइंट को वायर पर डेटा भेजने और फिर फ़िल्टर करने के विपरीत "सर्वर पर" चयन रखते हैं।

क्योंकि यदि आप ऐसा करते हैं तो यह पहली बार में डेटाबेस का उपयोग करने के उद्देश्य को नकार देता है। तो आप वाकई चाहते हैं कि यह सर्वर पर हो।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के लिए नया आदेश mongo नहीं चला सकता

  2. Mongodb एम्बेड संरचना अद्यतन और खोज?

  3. एक ही सर्वर पर एक MongoDB से दूसरे संग्रह में क्लोन कैसे करें

  4. मोंगोडब कुल, अंतराल मानदंड से दस्तावेजों की गणना कैसे करें?

  5. मोंगो डीबी अद्यतन क्वेरी नीला ब्रह्मांड डीबी में एम्बेडेड दस्तावेज़ों में काम नहीं कर रहा है