MongoDb संस्करण>=3.6 के साथ आप ऑपरेटर का लाभ उठा सकते हैं $expr
अपनी क्वेरी में और $objectToArray
का उपयोग करें
गतिशील वस्तु को एक सरणी में बदलने के लिए ऑपरेटर, $ifNull
सशर्त ऑपरेटर के रूप में।
निम्न उदाहरण इस दृष्टिकोण को प्रदर्शित करता है:
db.collection.find({
$expr: {
$gt: [
{
$size: {
$filter: {
input: { $objectToArray: '$$ROOT' },
cond: {
$ifNull: ['$$this.v.work', false]
}
}
}
},
0
]
}
})
मानों को कुंजियों के रूप में रखना अच्छा अभ्यास नहीं है और वर्तमान में (और शायद भविष्य में भी) फ़ील्डनाम में वाइल्डकार्ड के साथ MongoDB संग्रह को क्वेरी करना संभव नहीं है।
क्वेरी के लिए आसान एक वैकल्पिक स्कीमा डिज़ाइन के लिए, मैं एक स्कीमा रीडिज़ाइन का सुझाव दूंगा जो इस मॉडल का अनुसरण करता है:
"_id" : ObjectId("55128d6315f3df650f2038cf"),
"customer_name" : "test user",
"createad" : "2011-04-14 16:44:09",
"data" : [
{
"key" : "123456",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
},
{
"key" : "321456",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
},
{
"key" : "789654",
"home" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
},
"work" : {
"id" : "1536734296",
"last" : "2011-04-14 16:44:09"
}
}
]
}
जिसे आप निम्न प्रकार से क्वेरी कर सकते हैं
db.collection.find({ "data.work" : { $exists : true, $ne : null } })
work
. के अस्तित्व की जांच करने के लिए data
में फ़ील्ड सरणी।