μ μ
insertinsertλͺ λ Ήμ νλ μ΄μμ λ¬Έμλ₯Ό μ½μ νκ³ λͺ¨λ μ½μ μνκ° ν¬ν¨λ λ¬Έμλ₯Ό λ°νν©λλ€. MongoDB λλΌμ΄λ²μμ μ 곡νλ μ½μ λ©μλλ λ΄λΆμ μΌλ‘ μ΄ λͺ λ Ήμ μ¬μ©ν©λλ€.ν
mongoshμμ μ΄ λͺ λ Ήμdb.collection.insertOne()λ°db.collection.insertMany()λμ°λ―Έ λ©μλλ₯Ό ν΅ν΄ μ€νν μλ μμ΅λλ€.ν¬νΌ λ©μλλ
mongoshμ¬μ©μμκ² νΈλ¦¬νμ§λ§ λ°μ΄ν°λ² μ΄μ€ λͺ λ Ήκ³Ό λμΌν μμ€μ μ 보λ₯Ό λ°ννμ§ λͺ»ν μ μμ΅λλ€. νΈμκ° νμνμ§ μκ±°λ μΆκ° λ¦¬ν΄ νλκ° νμν κ²½μ° λ°μ΄ν°λ² μ΄μ€ λͺ λ Ήμ μ¬μ©ν©λλ€.λ°νν©λλ€: μμ μνκ° ν¬ν¨λ λ¬Έμμ λλ€. μμΈν λ΄μ©μ μΆλ ₯μ μ°Έμ‘°νμΈμ.
νΈνμ±
μ΄ λͺ λ Ήμ λ€μ νκ²½μμ νΈμ€ν λλ λ°°ν¬μμ μ¬μ©ν μ μμ΅λλ€.
MongoDB Atlas: ν΄λΌμ°λμμμ MongoDB λ°°ν¬λ₯Ό μν μμ κ΄λ¦¬ν μλΉμ€
μ°Έκ³
μ΄ λͺ λ Ήμ λͺ¨λ MongoDB Atlas ν΄λ¬μ€ν°μμ μ§μλ©λλ€. λͺ¨λ λͺ λ Ήμ λν Atlas μ§μμ κ΄ν΄ μμΈν μμλ³΄λ €λ©΄ μ§μλμ§ μλ λͺ λ Ήμ μ°Έμ‘°νμμμ€.
MongoDB Enterprise: MongoDBμ ꡬλ κΈ°λ° μ체 κ΄λ¦¬ λ²μ
MongoDB Community: MongoDBμ μμ€ μ¬μ© κ°λ₯ λ¬΄λ£ μ체 κ΄λ¦¬ λ²μ
ꡬ문
λͺ λ Ήμ λ€μκ³Ό κ°μ ꡬ문μ κ°μ§λλ€:
{ insert: <collection>, documents: [ <document>, <document>, <document>, ... ], ordered: <boolean>, maxTimeMS: <integer>, writeConcern: { <write concern> }, bypassDocumentValidation: <boolean>, comment: <any> }
insert λͺ
λ Ήμ λ€μ νλλ₯Ό μ¬μ©ν©λλ€.
νλ | μ ν | μ€λͺ
|
|---|---|---|
| λ¬Έμμ΄ | λμ 컬λ μ μ μ΄λ¦μ λλ€. |
| λ°°μ΄ | μ΄λ¦μ΄ μ§μ λ 컬λ μ μ μ½μ ν νλ μ΄μμ λ¬Έμ λ°°μ΄μ λλ€. |
| λΆμΈ | μ ν μ¬νμ
λλ€. |
| non-negative integer | μ ν μ¬ν. μκ° μ νμ λ°λ¦¬μ΄ λ¨μλ‘ μ§μ ν©λλ€. MongoDBλ |
| λ¬Έμ | μ ν μ¬ν. λͺ
λ Ήμ μ°κΈ° κ³ λ € νΈλμμ μμ μ€νλλ κ²½μ° μμ μ λν μ°κΈ° κ³ λ €λ₯Ό λͺ μμ μΌλ‘ μ€μ νμ§ λ§μΈμ. νΈλμμ μ μ°κΈ° κ³ λ €λ₯Ό μ¬μ©νλ €λ©΄ νΈλμμ λ° μ°κΈ° κ³ λ €λ₯Ό μ°Έμ‘°νμΈμ. |
| λΆμΈ | μ ν μ¬ν. |
| any | μ ν μ¬ν. μ΄ λͺ λ Ήμ 첨λΆν μ¬μ©μ μ 곡 μ½λ©νΈμ λλ€. μ€μ λλ©΄ μ΄ μ€λͺ μ λ€μ μμΉμμ μ΄ λͺ λ Ήμ λ μ½λμ ν¨κ» νμλ©λλ€.
λκΈμ μ ν¨ν λͺ¨λ BSON types (λ¬Έμμ΄, μ μ, κ°μ²΄, λ°°μ΄ λ±)μ΄ λ μ μμ΅λλ€. |
νλ
ν¬κΈ° μ ν
λͺ¨λ documents λ°°μ΄ μμμ μ΄ ν¬κΈ°λ μ΅λ BSON λ¬Έμ ν¬κΈ° μ΄νμ¬μΌ ν©λλ€.
documents λ°°μ΄μ μ΄ λ¬Έμ μλ μ΅λ λλ ν¬κΈ° μ΄νμ¬μΌ ν©λλ€.
λ¬Έμ μ ν¨μ± κ²μ¬
insert λͺ
λ Ήμ μ ν¨μ± κ²μ¬ κ·μΉμ΄ μλ 컬λ μ
μ λ¬Έμλ₯Ό μ½μ
νκ±°λ μ
λ°μ΄νΈν λ λ¬Έμ μ ν¨μ± κ²μ¬λ₯Ό 무μν μ μλ bypassDocumentValidation μ΅μ
μ λν μ§μμ μΆκ°ν©λλ€.
νΈλμμ
insertλ λΆμ° νΈλμμ
λ΄μμ μ¬μ©ν μ μμ΅λλ€.
μ€μ
λλΆλΆμ κ²½μ° λΆμ° νΈλμμ μ λ¨μΌ λ¬Έμ μ°κΈ°μ λΉν΄ λ ν° μ±λ₯ λΉμ©μ΄ λ°μνλ―λ‘ λΆμ° νΈλμμ μ κ°μ©μ±μ΄ ν¨κ³Όμ μΈ μ€ν€λ§ μ€κ³λ₯Ό λ체ν μλ μμ΅λλ€. λλΆλΆμ μλ리μ€μμ λΉμ κ·νλ λ°μ΄ν° λͺ¨λΈ (λ΄μ₯λ λ¬Έμ λ° λ°°μ΄) μ κ³μν΄μ λ°μ΄ν° λ° μ¬μ© μ¬λ‘μ μ΅μ μΌ κ²μ λλ€. μ¦, λλΆλΆμ μλ리μ€μμ λ°μ΄ν°λ₯Ό μ μ νκ² λͺ¨λΈλ§νλ©΄ λΆμ° νΈλμμ μ νμμ±μ΄ μ΅μνλ©λλ€.
μΆκ° νΈλμμ μ¬μ© κ³ λ € μ¬ν(μ: λ°νμ μ ν λ° oplog ν¬κΈ° μ ν)μ νλ‘λμ κ³ λ €μ¬νμ μ°Έμ‘°νμΈμ.
νΈλμμ μμ 컬λ μ μμ±
νΈλμμ μ΄ κ΅μ°¨ μ€λ μ°κΈ° νΈλμμ (write transaction)μΈ μ΄ μλ κ²½μ° λΆμ° νΈλμμ λ΄μμ 컬λ μ κ³Ό μΈλ±μ€λ₯Ό μμ±ν μ μμ΅λλ€.
νΈλμμ μμ μ‘΄μ¬νμ§ μλ 컬λ μ μ λν μ½μ μ μ§μ νλ©΄ MongoDBλ ν΄λΉ 컬λ μ μ μμμ μΌλ‘ μμ±ν©λλ€.
μ°κΈ° κ³ λ € λ° νΈλμμ
νΈλμμ μμ μ€νλλ κ²½μ° μμ μ λν μ°κΈ° κ³ λ €λ₯Ό λͺ μμ μΌλ‘ μ€μ νμ§ λ§μΈμ. νΈλμμ μ μ°κΈ° κ³ λ €λ₯Ό μ¬μ©νλ €λ©΄ νΈλμμ λ° μ°κΈ° κ³ λ €λ₯Ό μ°Έμ‘°νμΈμ.
λΆμ νν μ½μ
μ½μ μ€μ μλ² μ€λ₯κ° λ°μνλλΌλ μΌλΆ λ¬Έμκ° μ½μ λμμ μ μμ΅λλ€.
μ½μ
μ μ±κ³΅νλ©΄ μμ€ν
μμ 컬λ μ
μ μ½μ
λ λ¬Έμ μ insert.nμ λ°νν©λλ€. 볡μ λ³Έ μΈνΈ μν λ³κ²½μΌλ‘ μΈν΄ μ½μ
μμ
μ΄ μ€λ¨λλ©΄ μμ€ν
μμ λ¬Έμ μ½μ
μ κ³μν μ μμ΅λλ€. λ°λΌμ insert.nμ μ€μ μ½μ
λ λ¬Έμλ³΄λ€ μ μ μμ λ¬Έμλ₯Ό λ³΄κ³ ν μ μμ΅λλ€.
μμ
λ¨μΌ λ¬Έμ μ½μ
users 컬λ μ
μ λ¬Έμλ₯Ό μ½μ
ν©λλ€.
db.runCommand( { insert: "users", documents: [ { _id: 1, user: "abc123", status: "A" } ] } )
λ°νλ λ¬Έμλ λͺ λ Ήμ΄ λ¬Έμλ₯Ό μ±κ³΅μ μΌλ‘ μ½μ νμμ 보μ¬μ€λλ€. μμΈν λ΄μ©μ μΆλ ₯μ μ°Έμ‘°νμΈμ.
{ "ok" : 1, "n" : 1 }
Bulk Insert
users 컬λ μ
μ λ¬Έμ 3κ°λ₯Ό μ½μ
ν©λλ€.
db.runCommand( { insert: "users", documents: [ { _id: 2, user: "ijk123", status: "A" }, { _id: 3, user: "xyz123", status: "P" }, { _id: 4, user: "mop123", status: "P" } ], ordered: false, writeConcern: { w: "majority", wtimeout: 5000 } } )
λ°νλ λ¬Έμλ λͺ λ Ήμ΄ λ¬Έμ μΈ κ°λ₯Ό μ±κ³΅μ μΌλ‘ μ½μ νμμ 보μ¬μ€λλ€. μμΈν λ΄μ©μ μΆλ ₯μ μ°Έμ‘°νμΈμ.
{ "ok" : 1, "n" : 3 }
μ½μ
κ³Ό ν¨κ» μ¬μ© bypassDocumentValidation
μ€ν€λ§ μ ν¨μ± κ²μ¬ validationActionsμ΄ errorλ‘ μ€μ λλ κ²½μ° μ€ν€λ§ μ ν¨μ± κ²μ¬ κ·μΉμ μλ°νλ λ¬Έμμ λν΄ μ»¬λ μ
μ μ½μ
νλ©΄ μ€λ₯κ° λ°νλ©λλ€. μ΄λ¬ν κ·μΉμ μλ°νλ λ¬Έμλ₯Ό μ½μ
νλ €λ©΄ bypassDocumentValidation: trueλ₯Ό μ€μ ν©λλ€.
status νλμ μ ν¨μ± κ²μ¬ κ·μΉμ΄ μλ user 컬λ μ
μ λ§λλλ€.
μ ν¨μ± κ²μ¬ κ·μΉμ μνκ° 'Unknown(μ μ μμ)' λλ 'Incomplete(λΆμμ )'μΈμ§ νμΈν©λλ€.
db.createCollection("users", { validator: { status: { $in: [ "Unknown", "Incomplete" ] } } })
μ ν¨μ± κ²μ¬ κ·μΉμ μλ°νλ λ¬Έμλ₯Ό μ½μ νλ €κ³ μλν©λλ€.
db.runCommand({ insert: "users", documents: [ {user: "123", status: "Active" } ] })
μ½μ μ μ°κΈ° μ€λ₯ λ©μμ§λ₯Ό λ°νν©λλ€,
{ n: 0, writeErrors: [ { index: 0, code: 121, errInfo: { failingDocumentId: ObjectId('6197a7f2d84e85d1cc90d270'), details: { operatorName: '$in', specifiedAs: { status: { '$in': [Array] } }, reason: 'no matching value found in array', consideredValue: 'Active' } }, errmsg: 'Document failed validation' } ], ok: 1 }
bypassDocumentValidation : trueλ₯Ό μ€μ νκ³ μ½μ
μ λ€μ μ€νν©λλ€.
db.runCommand({ insert: "users", documents: [ {user: "123", status: "Active" } ], bypassDocumentValidation: true })
μμ μ΄ μ±κ³΅ν©λλ€.
μ€ν€λ§ μ ν¨μ± κ²μ¬ κ·μΉμ μλ°νλ λ¬Έμλ₯Ό νμΈνλ €λ©΄ validate λͺ
λ Ήμ μ¬μ©ν©λλ€.
μΆλ ₯
λ°νλ λ¬Έμμλ λ€μ νλμ νμ μ§ν©μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
insert.writeErrorsμ½μ μμ μ€μ λ°μν μ€λ₯μ κ΄ν μ λ³΄κ° ν¬ν¨λ λ¬Έμ λ°°μ΄μ λλ€.
writeErrorsλ°°μ΄μλ μ€λ₯κ° λ°μν κ° μ½μ μ λν μ€λ₯ λ¬Έμκ° ν¬ν¨λμ΄ μμ΅λλ€.κ° μ€λ₯ λ¬Έμμλ λ€μκ³Ό κ°μ νλκ° ν¬ν¨λμ΄ μμ΅λλ€.
insert.writeConcernErrorμ½μ μμ μ€μ λ°μν μ€λ₯μ κ΄ν μ λ³΄κ° ν¬ν¨λ λ¬Έμ λ°°μ΄μ λλ€.
λ²μ μμ 5.0.30 λ³κ²½λ¨:
insertκ° μμ μ€νλλ©΄ νλ μ΄μμ μ°κΈ° (write) μ€λ₯κ° λ°μνλλΌλ μ°κΈ° κ³ λ € (write concern) μ€λ₯κ° νμmongosλ³΄κ³ λ©λλ€. μ΄μ 릴리μ€μμλ μ°κΈ° (write) μ€λ₯κ° λ°μνλ©΄ κ° μ°κΈ°insertκ³ λ € (write concern) μ€λ₯λ₯Ό λ³΄κ³ νμ§ μμ μ μμμ΅λλ€.κ° μ€λ₯ λ¬Έμμλ λ€μκ³Ό κ°μ νλκ° ν¬ν¨λμ΄ μμ΅λλ€.
insert.writeConcernError.errInfo.writeConcernν΄λΉ μμ μ μ¬μ©λλ μ°κΈ° κ΄λ ¨ κ°μ²΄μ λλ€. μ°κΈ° λ¬Έμ κ°μ²΄ νλμ λν μμΈν λ΄μ©μ μ°κΈ° λ¬Έμ μ¬μμ μ°Έμ‘°νμΈμ.
μ°κΈ° κ³ λ € κ°μ²΄μλ μ°κΈ° λ¬Έμ μ μλ³Έμ λνλ΄λ λ€μ νλλ ν¬ν¨λ μ μμ΅λλ€.
insert.writeConcernError.errInfo.writeConcern.provenanceμ°κΈ° λ¬Έμ κ° λ°μν μμΉλ₯Ό λνλ΄λ λ¬Έμμ΄ κ°μ λλ€(μ°κΈ° λ¬Έμ
provenanceλΌκ³ λ ν¨). λ€μ νμλ μ΄ νλμ μ¬μ©ν μ μλ κ°κ³Ό κ·Έ μλ―Έκ° λμ μμ΅λλ€.μΆμ²μ€λͺclientSuppliedμ°κΈ° μ°λ € μ¬νμ μ ν리μΌμ΄μ μμ μ§μ λμμ΅λλ€.
customDefaultμ°κΈ° κ³ λ €λ μ¬μ©μ μ μλ κΈ°λ³Έκ°μμ λΉλ‘―λ κ²μ λλ€.
setDefaultRWConcernμ μ°Έμ‘°νμμμ€.getLastErrorDefaultsμ°κΈ° κ³ λ €λ 볡μ λ³Έ μΈνΈμ
settings.getLastErrorDefaultsνλμμ λ°μνμ΅λλ€.implicitDefaultμ°κΈ° κ³ λ €λ λ€λ₯Έ λͺ¨λ μ°κΈ° κ³ λ € μ¬μμ΄ μλ μνμμ μλ²μμ λ°μνμ΅λλ€.
λ€μμ λ¨μΌ λ¬Έμμ μ±κ³΅μ μΈ insertμ λν΄ λ°νλ μμ λ¬Έμμ
λλ€.
{ ok: 1, n: 1 }
λ€μμ insert λ¬Έμ λ κ° μ€ νλλ μ±κ³΅μ μΌλ‘ μ½μ
λμμ§λ§ λ€λ₯Έ λ¬Έμμμ μ€λ₯κ° λ°μν κ²½μ° λ°νλ λ¬Έμ μμμ
λλ€.
{ "ok" : 1, "n" : 1, "writeErrors" : [ { "index" : 1, "code" : 11000, "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.users.$_id_ dup key: { : 1.0 }" } ] }