मेरे पास एक संग्रह है जिसमें निम्नलिखित संरचना वाले दस्तावेज़ हैं:

[
    {
        "_id" : ObjectId("5b23a2d11bc3e2550e749991"),
        "fieldA" : "field2",
        "fieldB" : [ 
            "field2", 
            "field2", 
            "field2"
        ],
        "fieldC" : "ffield2"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749992"),
        "fieldA" : "field2",
        "fieldB" : "ffield2",
        "fieldC" : "fffield2"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749993"),
        "fieldA" : "field1",
        "fieldB" : [ 
            "field1", 
            "field1", 
            "field1"
        ],
        "fieldC" : "ffield1"
    },

    {
        "_id" : ObjectId("5b23a2d21bc3e2550e749994"),
        "fieldA" : "field1",
        "fieldB" : "ffield1",
        "fieldC" : "fffield1"
    },

    {
        "_id" : ObjectId("5b23a2d31bc3e2550e749995"),
        "fieldA" : "field3",
        "fieldB" : [ 
            "field3", 
            "field3", 
            "field3"
        ],
        "fieldC" : "ffield3"
    },

    {
        "_id" : ObjectId("5b23a2d31bc3e2550e749996"),
        "fieldA" : "field3",
        "fieldB" : "ffield3",
        "fieldC" : "fffield3"
    }
]

मैं केवल उन्हीं दस्तावेज़ों को खोजना चाहता हूँ जिनके filedB सरणीबद्ध मान हैं। क्वेरी को सक्रिय करते समय filedB का मान अज्ञात है। बस यह जान लें कि कुछ दस्तावेज़ों में fieldB सरणी के रूप में है जबकि अन्य में आदिम स्ट्रिंग मान है।

मैं उन दस्तावेज़ों को कैसे ढूँढ सकता हूँ जिनके filedB फ़ील्ड में एक सरणी मान है?

1
SaP 15 जून 2018, 14:40

1 उत्तर

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

एक अन्य समाधान यदि आप 3.2 . से कम के मोंगोडब संस्करण का उपयोग कर रहे हैं

db.getCollection('testCollection').find( {$where:"typeof this.fieldB !== 'string'"})

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

यदि दस्तावेज़ में fieldB के लिए एकल मान है, तो आप इसे एकल तत्व की एक सरणी में बदल सकते हैं।

1
dsharew 15 जून 2018, 15:26