sql >> Database >  >> NoSQL >> MongoDB

Werk genest object in MongoDB bij als het bestaat, voeg het anders toe

Om een ​​document in te voegen als het niet bestaat, wordt gedaan door upsert en als u een voorwaardelijk ingesloten document wilt bijwerken, hebt u $ positionele operator nodig. U moet dus beide in de query gebruiken om bovenstaande functionaliteit te implementeren.

Maar op dit moment ondersteunt mongodb geen upserting met $ positionele operator

Dus wat je wilt is voorlopig niet mogelijk in één zoekopdracht, je kunt het ook in twee zoekopdrachten doen.

Eerst

db.collection('ratings').update(
  {"refid":refid, "votes.ip": ip},
  {
     $set: { "votes.$.rating":rating }
  }
)

Het geeft het aantal bijgewerkte documenten terug, als het 1 is, is het goed, en als het 0 is, moet je een nieuw record pushen.

db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
    {$push: { votes: { "ip":ip , "rating":rating  }}
})

Er is ook een jira-ticket voor positionele operator en upserting, stem voor dit probleem als je deze functionaliteit in mongodb wilt. Hieronder is de link van het probleem

https://jira.mongodb.org/browse/SERVER-3326

(BEWERKEN :Het Jira-ticket is gesloten met Do not Do in juni 2019)



  1. Een array lezen in mongodb?

  2. 2-regelige NodeJS-toepassing crasht op mongoose.connect() tijdens een poging om verbinding te maken met een mongolab MongoDB-database

  3. Hoe mongoDB-gegevens exporteren naar een CSV-indeling?

  4. Fout:geen open verbindingen bij Db._executeQueryCommand Node.js