MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $setOnInsert

MongoDB $setOnInsert Операторът за актуализиране на полето може да се използва за вмъкване на конкретна стойност по време на прехвърляне.

Ако операцията за актуализиране води до вмъкване на нов документ (т.е. upsert), тогава $setOnInsert операторът влиза в сила, в противен случай няма ефект.

Пример

Да предположим, че имаме колекция, наречена dogs със следния документ:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }

И стартираме следния update() команда за актуализиране на документ, който не съществува в колекцията:

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 50, height: 40 },
     $setOnInsert: { name: "Bark" }
  },
  { upsert: true }
)

Това ще доведе до следния изход:

WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 2 })

Което ни казва, че един документ е бил поместен.

Нека проверим колекцията:

db.dogs.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 40, "name" : "Bark", "weight" : 50 }

Можем да видим, че документ 2 е вмъкнат и включва полето/стойността, която предоставихме за $setOnInsert оператор (т.е. name: "Bark" ).

Когато документът съществува (т.е. няма добавка)

Сега нека се опитаме да актуализираме документа, който току-що поставихме. Нека използваме същото изявление като в предишния пример, но с различни стойности.

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 55, height: 45 },
     $setOnInsert: { name: "Fluffy" }
  },
  { upsert: true }
)

Изход:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Този път един документ съвпадна и беше актуализиран. Нищо не беше разстроено.

Нека проверим колекцията отново.

db.dogs.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 45, "name" : "Bark", "weight" : 55 }

Така че в този случай weight и height полетата бяха актуализирани, но name полето не беше.

Причината, поради която полето за име не е актуализирано, е, че не е било извършено upsert. $setOnInsert Операторът посочва само полето/стойността, която да се зададе, когато операцията за актуализиране води до вмъкване на нов документ (т.е. upsert).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB проекция на вложени масиви

  2. PyMongo upsert изхвърля upsert трябва да е екземпляр на грешка bool

  3. Как да премахнете дублиращи се записи от масив?

  4. Създайте база данни в MongoDB

  5. 2 начина за изтриване на колекция в MongoDB