mongodb
नहीं है विशेषज्ञ लेकिन, अगर मैं आपको सही ढंग से समझता हूं, तो आप चाहते हैं कि उप-दस्तावेज़ का _id फ़ील्ड स्वचालित रूप से डाला जाए।
मैंने threads
created बनाया है db और फिर पहला message
सम्मिलित किया messages
. में निम्न आदेश का उपयोग कर संग्रह:
db.messages.insert({messages:[{_id:ObjectId(), message:"Message 1."}]});
ध्यान दें _id:ObjectId()
खेत। परिणाम इस प्रकार है:
अब जबकि मेरे पास ObjectId(56...)
. है , मैं उस विशेष रिकॉर्ड को अपडेट कर सकता हूं और उसमें और संदेश डाल सकता हूं। और आदेश इस प्रकार है:
db.messages.update({"_id":ObjectId("56...")},
{$push:{messages:{_id:ObjectId(), message:"I am message 2."}}});
और उपरोक्त संग्रह में नया संदेश सम्मिलित करेगा। नीचे स्क्रीनशॉट देखें:
और अंत में कुछ अपडेट के बाद संग्रह इस प्रकार दिखता है:
messages
में सभी _id फ़ील्ड सरणी स्वचालित रूप से उत्पन्न होती है।
_id
. का उपयोग करना एक अच्छा विचार नहीं हो सकता है विभिन्न कारणों से क्षेत्र। उप-दस्तावेजों के लिए कुंजी के रूप में _id का उपयोग करना है या नहीं, इस बारे में अधिक जानकारी के लिए कृपया Google।
मैंने MongoDB शेल संस्करण 3.0.6 का उपयोग किया है आदेशों के लिए।
संपादित करें 28-01-2016 16:09
चूंकि उपरोक्त समाधान MongoDB शेल पर आधारित था, इसलिए मैंने MongoDB के लिए Node.js ड्राइवर का उपयोग करके एक और परीक्षण करने का निर्णय लिया। सबसे पहले, मैं ऑब्जेक्टिड वैरिएबल को फॉलो के रूप में घोषित करता हूं
var ObjectID = require('mongodb').ObjectID;
मैं उस थ्रेड की दस्तावेज़ आईडी के साथ ऑब्जेक्ट आईडी का उपयोग करूंगा जिसमें संदेश को मेरे update
में अनुसरण के रूप में सम्मिलित किया जाना चाहिए और findOneAndUpdate
फ़ंक्शन कॉल
app.get('/insertNewMessage', function(req, res) {
db.collection("messages").findOneAndUpdate({
_id: new ObjectID('56aa3554e90911b64c36a424')
}, {
$push: {
messages: {
_id: new ObjectID(),
message: "From NodeJS with <3 using findOneAndUpdate.Bye."
}
}
}, function(err, result) {
if (err)
res.json(err);
else
res.json(result);
});
});
दोनों का परीक्षण किया और ठीक काम करता है। नीचे स्क्रीनशॉट देखें: