MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

एमजीओ अपरर्ट ऑपरेशन को अनुकूलित करें

"मेरा वास्तविक प्रश्न:मैं अपरर्ट से पहले एमजीओ के व्यवहार को कैसे अनुकूलित कर सकता हूं? का उत्तर देने के लिए " - आप bson Getter को परिभाषित करके bson marshalling को कस्टमाइज़ कर सकते हैं मॉडल को।

यह कैसे काम करता है यह स्पष्ट करने के लिए, नेस्टेड दस्तावेज़ों से बचने के लिए मॉडल को सरल बनाएं:

type Game struct {
    ID int `bson:"_id"`
    Name string
    Stats [] float64
}

निम्नलिखित के रूप में newGame के साथ:

newGame := Game{
    ID: 1,
    Name: "foo",
    Stats: []{5.0}
}

अपडेट col.UpsertId(newGame.ID, newGame) डिफ़ॉल्ट मार्शल द्वारा newGame JSON में, mongo क्वेरी जैसे:

update({_id:1}, {name: "foo", stats: [5]}, {upsert: true});

$set . का उपयोग करने के लिए , $push आदि, आप एक कस्टम bson गेटर परिभाषित कर सकते हैं। उदा.

func (g Game) GetBSON() (interface{}, error) {
    return bson.M{
        "$set": bson.M{"name": g.Name}, 
        "$push": bson.M{"stats": bson.M{"$each": g.Stats}},
    }, nil
}

तो अपडेट col.UpsertId(newGame.ID, newGame) एक मोंगोडब क्वेरी उत्पन्न करेगा

update({_id:1}, {$set: {name: "foo"}, $push: {stats: {$each: [5]}}}, {upsert: true});

इसे स्पष्ट करने के लिए - कस्टम मार्शलर का उपयोग सभी एमजीओ प्रश्नों में किया जाएगा, इसलिए आप शायद इसे सीधे मॉडल में परिभाषित नहीं करना चाहते हैं, लेकिन इसके व्युत्पन्न के लिए केवल अप्सर्ट संचालन में उपयोग करना चाहते हैं:

type UpdatedGame struct {
    Game
}

func (g UpdatedGame) GetBSON() (interface{}, error) {
    return bson.M{....}
}

.....

newGame := Game{
    ID: 1,
    Name: "foo",
    Stats: []{5.0}
}

col.UpsertId(newGame.ID, UpdatedGame{newGame})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. उल्का/मोंगो के माध्यम से उप-दस्तावेज़ सरणी लौटाना

  2. लूप के बिना ईमेल जैसे अद्वितीय आईडी द्वारा विभिन्न मूल्यों के साथ नेवला अद्यतन कई

  3. MongoDB में बहु-भाषा विशेषताएँ

  4. MongoDb और मॉर्फिया पासवर्ड और उपयोगकर्ता नाम

  5. MongoDB से यादृच्छिक नमूना भारी विषम परिणाम लौटा रहा है