मान लीजिए कि मेरे पास दो संग्रह हैं, A
और B
।दो अलग-अलग संरचित संग्रहों का अंतर प्राप्त करना
A
निम्न रूप में सरल दस्तावेज शामिल हैं:
{ _id: '...', value: 'A', data: '...' }
{ _id: '...', value: 'B', data: '...' }
{ _id: '...', value: 'C', data: '...' }
…
B
इस तरह नेस्टेड वस्तुओं में शामिल हैं:
{ _id: '...', values: [ 'A', 'B' ]}
{ _id: '...', values: [ 'C' ]}
…
अब क्या हो सकता है वहाँ A
में दस्तावेजों है कि द्वारा संदर्भित नहीं कर रहे हैं वह यह है कि B
में कोई भी दस्तावेज़, या B
में संदर्भित दस्तावेज़ हैं जो A
में मौजूद नहीं हैं।
चलिए उन्हें "अनाथ" कहते हैं।
मेरा प्रश्न अब है: मैं उन अनाथ दस्तावेजों को सबसे कुशल तरीके से कैसे ढूंढूं? अंत में, मुझे उनकी _id
फ़ील्ड की आवश्यकता है।
अब तक मैं unwind
का इस्तेमाल किया है A
"समतल" के लिए, और differenceWith
function of Ramda का उपयोग कर अंतर की गणना, लेकिन यह काफी लंबा समय लगता है और, वास्तव में कुशल नहीं निश्चित है के रूप में मैं के बजाय ग्राहक पर सभी काम कर डेटाबेस में
मैंने देखा है कि मोंगोडीबी में $setDifference
ऑपरेटर है, लेकिन मुझे इसे काम नहीं मिला।
क्या कोई मुझे सही दिशा में इंगित कर सकता है, Node.js का उपयोग करके इन समस्याओं को हल करने और डेटाबेस में काम के अधिकांश (सभी?) को चलाने के लिए कैसे कर सकता है? किसी भी संकेत की सराहना की जाती है :-)
से बताया है 'आदेश में यह प्रयास करें:' वर myCursor = db.B.find(); var B = myCursor.hasNext()? myCursor.next(): शून्य; db.A.find ({value: {$ nin: B.values}}); उम्मीद है कि यह – karthick
@ karthick.k मदद करता है बस मेरे लंबे और verbose जवाब पोस्ट करें! आपका समाधान बहुत बेहतर दिखता है! मैं अपना छोड़ दूंगा, क्योंकि यह दिखाता है कि इसे एकत्रीकरण पाइपलाइन के साथ कैसे किया जाए ... – cessor
@cessor विभिन्न विचार और समाधान हमेशा अच्छे होते हैं :) – karthick