फेसबुक की निजी संदेश प्रणाली ले लो जहां आपको प्रेषक और रिसीवर को संदेश सामग्री के साथ ट्रैक रखना होगा। अगर मैं MySQL का उपयोग कर रहा था तो मेरे पास कई टेबल होंगे, लेकिन मोंगोडीबी के साथ मैं उन सभी से बचने की कोशिश करूंगा। मैं एक "अच्छी" स्कीमा के साथ आने की कोशिश कर रहा हूं जो स्केल कर सकता है और बनाए रखना आसान है। अगर मैं mysql का उपयोग कर रहा था, तो मेरे पास उपयोगकर्ता और संदेश का संदर्भ देने के लिए एक अलग तालिका होगी। नीचे देखें ...MongoDB का उपयोग कर एक निजी संदेश प्रणाली का ट्रैक कैसे रखें?
प्रोफ़ाइल तालिका
user_id
first_name
last_name
संदेश तालिका
message_id
message_body
time_stamp
user_message_ref तालिका
user_id (FK)
message_id (FK)
is_sender (boolean)
ऊपर सूचीबद्ध स्कीमा के साथ
, मैं किसी भी संदेश के लिए क्वेरी कर सकते हैं कि " बॉब "चाहे वह प्राप्तकर्ता या प्रेषक हो, भले ही हो।
अब इसे एक स्कीमा में कैसे चालू करें जो मोंगोडीबी के साथ काम करता है। मैं सोच रहा हूं कि संदेशों को पकड़ने के लिए मेरे पास एक अलग संग्रह होगा। समस्या यह है कि प्रेषक और प्राप्तकर्ता के बीच मैं अंतर कैसे कर सकता हूं? यदि बॉब लॉग इन करता है, तो मैं इसके खिलाफ क्या पूछता हूं? बॉब ने ईमेल शुरू करने के आधार पर, मैं यह देखने के लिए कि क्या संदेश उपयोगकर्ता से संबंधित है, मैं "प्रेषक" और "रिसीवर" के खिलाफ पूछना नहीं चाहता हूं।
मैंने मोंगोडीबी के संदेश समूह को मारा और काम करने वाले किसी चीज़ से दूर आया। प्रत्येक संदेश को "ब्लॉग" पोस्ट के रूप में माना जाएगा। जब कोई संदेश बनाया जाता है, तो दो उपयोगकर्ताओं को जोड़ें (कोई फर्क नहीं पड़ता कि प्रेषक/रिसीवर प्रारंभ में कौन सा है)। इसके बाद प्रत्येक प्रतिक्रिया को एक टिप्पणी के रूप में माना जाएगा, जिसे एक सरणी में डाला जाएगा।
संदेश
{
"_id" : <objectID>,
"users" : ["bob", "amy"],
"user_msgs" :
[
{
"is_sender" : "bob",
"msg_body" : "Hi Amy, how are you?!",
"timestamp" : <generated by Mongo>
}
{
"is_sender" : "amy",
"msg_body" : "Bob, long time no see, how is the family?!",
"timestamp" : <generated by Mongo>
}
]
}
इस तरह से मैं संदेशों के लिए क्वेरी कर सकते हैं कि शामिल "बॉब," और "user_msgs" सरणी के माध्यम से लूप। मैं यह बताने में सक्षम हूं कि प्रेषक कौन है और टाइमस्टैम्प द्वारा क्रमबद्ध करें।
यह अच्छी डिजाइन की तरह दिखता है। लेकिन मैं एक समस्या से फंस गया हूँ। मैं बातचीत धागे को लागू करना चाहता हूं। इसलिए, जब कोई उपयोगकर्ता अपना संदेश खोलता है तो उसे प्रत्येक वार्तालाप थ्रेड के लिए हर अंतिम संदेश देखना चाहिए (भेजा या प्राप्त कोई फर्क नहीं पड़ता)। तो बॉब को एमी और क्रिस के साथ और एन के साथ अंतिम आदान-प्रदान संदेश दिखाई देगा ... (उदाहरण के लिए यह लिंक्डइन पर इस तरह से काम करता है)। लेकिन मुझे नहीं पता कि यह कैसे पूछें। तो वर्तमान स्कीमा के साथ: बॉब के साथ प्रत्येक 'ब्लॉग पोस्ट' के लिए मुझे एम्बेडेड सरणी से केवल एक अंतिम संदेश प्राप्त करने की आवश्यकता है। कोई विचार? – maret