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

{
    _id: ObjectId('5e7638edfe406adbff385784'),
    chat: 109081533,
    user: 109081533,
    data: {
        name: 'Max',
        address: {
            '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7': {
                transfer_orders: {
                    '1584806368': {
                        state: 'new',
                        from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        to: '0x590631dd6f3ef395ca46ad5108f4fb4ab9ef0cd4',
                        amount: '22',
                        data: 'some info'
                    },
                    '1584806512': {
                        state: 'pending',
                        from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        to: '0xFdd8b50f36a3810b7971dd9631f885E2f2Fb400C',
                        amount: '33',
                        data: 'some info'
                    },
                    '1584898932': {
                        state: 'new',
                        from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        to: '0x590631dd6f3ef395ca46ad5108f4fb4ab9ef0cd4',
                        amount: '121',
                        data: 'some info'
                    },
                    '1584924924': {
                        state: 'ok',
                        from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        to: '0xb2aff88b085b4f01ea89b39407c04faa962e153d',
                        amount: '222',
                        data: 'some info'
                    },
                    '1585144560': {
                        state: 'new',
                        from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        to: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
                        amount: '22',
                        data: 'some info'
                    }
                },
                income: {}
            }
        }
    }
}
  1. आंतरिक वस्तुओं को कैसे प्रोजेक्ट करें जहां राज्य == 'नया'?
  2. दस्तावेजों को कैसे खोजें जहां आंतरिक वस्तुएं जहां राज्य == 'नया' है?

मैंने इस तरह से डॉट नोटेशन की कोशिश की है find_one({"data.address.0.transfer_orders.0": {state: "new"}})। लेकिन पता और transfer_orders तत्व सरणियाँ नहीं हैं। मैंने पाया है कि find({"data.address": {$type: 3}}) मेरे संग्रह के लिए कार्य है। इसलिए पता तत्व वस्तु प्रकार है। लेकिन इसे कैसे पूछें?

0
Max S 31 मार्च 2020, 13:39

1 उत्तर

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

आईडी कुंजियों वाली वस्तुओं के लिए एक प्रश्न लिखना आसान काम नहीं है।

मुझे लगता है कि आपकी चाबियाँ (0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7, 1584898932) डीबी स्कीमा का हिस्सा नहीं हैं, इसलिए उन्हें अनुक्रमित नहीं किया जा सकता है

हालांकि, सरणी के लिए आप $elemMatch जैसे ऑपरेटरों का उपयोग कर सकते हैं, यहां देखें: Query an सरणी

मेरा सुझाव है कि आप कन्वर्ट अपने इसके बजाय सरणियों के लिए मानचित्र (ऑब्जेक्ट्स)

transfer_orders: [
  'key': '1584806368',
  'value': {
      state: 'new',
      from: '0x3cd68b454bce1c7be95a3587bfd71d1be9bb85a7',
      to: '0x590631dd6f3ef395ca46ad5108f4fb4ab9ef0cd4',
      amount: '22',
      data: 'some info'
   }
]
0
ijavid 31 मार्च 2020, 12:45