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

актуализация на MongoDB()

В MongoDB db.collection.update() метод променя съществуващ документ или документи в колекция.

По подразбиране актуализира само един документ. Но ако multi: true е посочено, след което актуализира всички документи, които отговарят на критериите за заявка.

Актуализиране на един документ

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

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Можем да актуализираме един документ по следния начин:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Резултат:

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

Само един документ беше актуализиран. Това се потвърждава, когато правим заявка за колекцията.

db.pets.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Актуализиране на няколко документа

Нека отново да използваме оригиналните документи:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Този път ще добавим multi: true към нашата операция за актуализиране, за да актуализираме всички документи, които отговарят на критериите за заявка:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } },
    { multi: true }
    )

Резултат:

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

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

Нека отново да разгледаме нашата колекция:

db.pets.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Както се очакваше, и двата документа вече имат type на Cow .

Нагоре

db.collection.update() методът приема upsert аргумент, който ви позволява да извършите операция upsert.

Когато upsert: true , документът се актуализира, ако има съответствие с критериите за филтриране, но ако няма съвпадение, се вмъква нов документ.

Нека започнем отново с оригиналните документи:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Пример:

db.pets.update( 
    { name: "Bubbles" },
    { $set: { type: "Fish" } },
    { upsert: true }
    )

Резултат:

 WriteResult({
 "nMatched" : 0,
 "nUpserted" : 1,
 "nModified" : 0,
 "_id" : ObjectId("5fe2c925d9914101694102e1")
 }) 

В този случай нямаше съвпадения, така че документът беше въведен.

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

db.pets.find()

Резултат:

 { "_id" : 1, "name" : "Wag", "type" : "Dog" }
 { "_id" : 2, "name" : "Bark", "type" : "Dog" }
 { "_id" : 3, "name" : "Meow", "type" : "Cat" }
 { "_id" : ObjectId("5fe2c925d9914101694102e1"), "name" : "Bubbles", "type" : "Fish" } 

Вградени документи

Можете също да използвате db.collection.update() за да актуализирате вградените документи.

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

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
}

Можем да използваме следния код, за да актуализираме вградения документ.

db.pets.update({ 
    _id: 1 
    }, { 
        $set: { 
            "specs.weight": 20, 
            "specs.color": "blue"
        } 
})

Резултат:

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

Така можем да видим, че един документ е съпоставен и променен.

Нека проверим документа.

db.pets.find({
    _id: 1
    }).pretty()

Резултат:

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 20,
		"color" : "blue"
	}
}

Можем да видим, че вграденият документ е актуализиран, както е посочено.

Масиви

Нека използваме db.collection.update() за да актуализирате масив.

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

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Нека актуализираме два от елементите на масива и името на кучето.

db.pets.update({ 
    _id: 1 
    }, { 
        $set: { 
            "name": "Bark",
            "awards.0": "Bottom Dog", 
            "awards.1": "Worst Dog"
        } 
})

Резултат:

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

Можем да видим, че един документ е съпоставен и променен.

А сега погледнете документа.

db.pets.find().pretty()

Резултат:

{
	"_id" : 1,
	"name" : "Bark",
	"type" : "Dog",
	"awards" : [
		"Bottom Dog",
		"Worst Dog",
		"Biggest Dog"
	]
}

Параметърът arrayFilters

Можете също да използвате arrayFilters параметър и позиционния $ оператор, за да определи кои елементи на масива да актуализира.

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

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

Бихме могли да изпълним следната заявка, за да актуализираме само онези елементи на масива, които имат стойност, по-висока от определено количество (в този случай 10).

db.players.update(
   { scores: { $gte: 10 } },
   { $set: { "scores.$[e]" : 10 } },
   { arrayFilters: [ { "e": { $gte: 10 } } ] }
)

Резултат:

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

Както се очаква, това актуализира само един документ, въпреки че два документа отговарят на критериите (защото не сме посочили multi: true ).

Ето как изглеждат документите сега.

db.players.find()

Резултат:

{ "_id" : 1, "scores" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

В документ 2 бяха актуализирани два елемента на масива, тъй като тези елементи отговаряха на критериите.

Повече информация

db.collection.update() Методът приема и други параметри, като writeConcern , collation и hint .

Вижте документацията на MongoDB за db.collections.update() за повече информация.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какви потребителски привилегии на MongoDB са ми необходими, за да добавя потребител към нова/друга база данни на Mongo?

  2. MongoDB - Пуснете колекция

  3. Mongodb, намерете дали колекцията е празна, node.js

  4. Разлика между съхраняването на ObjectId и неговата низова форма в MongoDB

  5. Групов масив след размотаване и съвпадение