MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB – Hinzufügen zu einem Satz und Inkrementieren

Wenn Sie bereit sind, von einer Liste zu Hash (Objekt) zu wechseln, können Sie dies atomar tun.

Aus den Dokumenten :"$inc ... erhöht Feld um den Zahlenwert, wenn Feld im Objekt vorhanden ist, ansonsten setzt Feld auf den Zahlenwert."

{ $inc : { field : value } }

Wenn Sie also Ihren Container und Ihr Objekt umgestalten könnten:

words: [
  {
    'word': 'foo',
    'count': 1
  },
  ...
]

zu:

words: {
  'foo': 1,
  'other_word: 2,
  ...
}

Sie könnten die Operation update verwenden mit:

{ $inc: { 'words.foo': 1 } }

was { 'foo': 1 } erzeugen würde wenn 'foo' nicht existiert, sonst foo erhöhen.

Beispiel:

$ db.bar.insert({ id: 1, words: {} });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "words" : {     },   "id" : 1   }
]
$ db.bar.update({ id: 1 }, { $inc: { 'words.foo': 1 } });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "id" : 1,   "words" : {   "foo" : 1   }   }
]
$ db.bar.update({ id: 1 }, { $inc: { 'words.foo': 1 } });
$ db.bar.find({ id: 1 })
[ 
  {   ...,   "id" : 1,   "words" : {   "foo" : 2   }   }
]