陣列插入元素不存在時插入,存在時更新(多個條件)?
你可以使用 bulkWrite()。我們使用文件建立一個集合 −
> db.demo105.insertOne( { _id:'101', Name:'Chris', Details:[{ Marks1:60, Marks2:70, Marks3:70 }, { Marks1:70, Marks2:70, Marks3:90 }] } );
{ "acknowledged" : true, "insertedId" : "101" }使用 find() 方法顯示集合中的所有文件 −
> db.demo105.find().pretty();
這將生成以下輸出 −
{
"_id" : "101",
"Name" : "Chris",
"Details" : [
{
"Marks1" : 60,
"Marks2" : 70,
"Marks3" : 70
},
{
"Marks1" : 70,
"Marks2" : 70,
"Marks3" : 90
}
]
}以下查詢將在元素不存在的情況下插入陣列,存在時則使用多個條件進行更新 −
> db.demo105.bulkWrite([
... { "updateOne": {
... "filter": {
... "_id": "101",
... "Details": {
... "$elemMatch": { Marks2: 70, Marks3: 70 }
... }
... },
... "update": {
... "$set": { "Details.$.Marks3": 96 }
... }
... }},
... { "updateOne": {
... "filter": {
... "_id": "101",
... "Details": {
... "$not": {
... "$elemMatch": { Marks2: 70, Marks3: 70 }
... }
... }
... },
... "update": {
... "$push": { "Details": { Marks1: 94, Marks2: 97,Marks3:99} }
... }
... }},
... { "updateOne": {
... "filter": { "_id": 101 },
... "update": {
... "$setOnInsert": {
... "Details": [
... { Marks1: 34, Marks2: 67,Marks3:87 }
... ]
... }
... },
... "upsert": true
... }}
... ])
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 0,
"matchedCount" : 2,
"upsertedCount" : 1,
"insertedIds" : {
},
"upsertedIds" : {
"2" : 101
}
}使用 find() 方法顯示集合中的所有文件 −
> db.demo105.find().pretty();
這將生成以下輸出 −
{
"_id" : "101",
"Name" : "Chris",
"Details" : [
{
"Marks1" : 60,
"Marks2" : 70,
"Marks3" : 96
},
{
"Marks1" : 70,
"Marks2" : 70,
"Marks3" : 90
},
{
"Marks1" : 94,
"Marks2" : 97,
"Marks3" : 99
}
]
}
{
"_id" : 101,
"Details" : [
{
"Marks1" : 34,
"Marks2" : 67,
"Marks3" : 87
}
]
}
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP