मैं निम्नलिखित का उपयोग दस्तावेज़ स्कीमा काम नहीं करता:MongoDB क्वेरी
//User Document
{
"_id": "0610457c-b25b-4e73-b859-11987a3fe271",
"FirstName": "Some Name",
"LastName": "surname",
// it is array of ledger items
"LedgerBook": [
{
"AccountId": "aadfgdf6319d3-1a12-4575-9776-c6653sdfg5c32527",
"TransactionId": "ef98bbc4-3efb-46dc-b632-5adfgdfg1fcc378446",
....
},
...
]
और जब मैं क्वेरी db.users.find({ "LedgerBook" : { "$type" : 4 } }).limit(50);
यह कुछ भी नहीं देता है लागू करने का प्रयास है, लेकिन क्वेरी के लिए db.users.find({ "LedgerBook" : { "$type" : 3 } }).limit(50);
अच्छी तरह से काम (सभी दस्तावेजों है कि वापसी लेजरबुक आइटम)।
ऐसा क्यों होता है?
टाइप = 4 ऐरे और टाइप = 3 ऑब्जेक्ट है।
मैं उन सभी दस्तावेजों को प्राप्त करना चाहता हूं जिनमें कम से कम एक लेजरबुक आइटम है।
पहली क्वेरी behaivor मेरे लिए अजीब लग रहा है। मैं मूल दस्तावेज़ के भीतर लेजरबुक के प्रकार की जांच कैसे कर सकता हूं? इसके अलावा @Andrei उन सभी दस्तावेजों को चाहते हैं जो लेजरबुक को आइटम से 1 से अधिक मानते हैं। लेकिन आपकी दूसरी क्वेरी लेजरबुक का उल्लंघन करने वाले सभी दस्तावेज लौटाती है (भले ही सरणी आइटम बराबर 0 के बराबर हों)। –
यह है कि सरणी के काम के खिलाफ सवाल कैसे हैं। शायद अजीब लग सकता है, लेकिन ज्यादातर समय यह वही है जो आप चाहते हैं। लेजरबुक सरणी के लिए 1 या अधिक प्रविष्टियों के साथ परीक्षण करने के लिए आपको $ $ का उपयोग करना होगा जहां क्लॉज: –
> db.items.find ({$ जहां: function() {इसे वापस करें। लेजरबुक उदाहरण Array && this.LedgerBook.length > 0;}}) –