यह अधिकांश जरूरतों के लिए पर्याप्त लचीला होना चाहिए:
function dotNotate(obj,target,prefix) {
target = target || {},
prefix = prefix || "";
Object.keys(obj).forEach(function(key) {
if ( typeof(obj[key]) === "object" && obj[key] !== null ) {
dotNotate(obj[key],target,prefix + key + ".");
} else {
return target[prefix + key] = obj[key];
}
});
return target;
}
अपने excludesFields
पर चलाएं इस प्रकार परिवर्तनशील:
dotNotate(excludeFields);
यह वर्तमान संरचना लौटाता है:
{ "Contact.Address" : 0, "Contact.Phone" : 0 }
तो आप इनलाइन भी कर सकते हैं:
things.findOne({}, {fields: dotNotate(excludeFields) })
या प्रक्षेपण के रूप में प्रदान करें:
var projection = { "fields": {} };
dotNotate(excludeFields,projection.fields);
things.findOne({}, projection);
जब तक आपको $push
जैसे ऑपरेटरों की आवश्यकता न हो, सभी गहराई पर और यहां तक कि एक आवश्यक तरीके से सरणियों के साथ भी अच्छी तरह से काम करता है ।