macOS์์ ์ต์ ๋ฒ์ ์ Node.js๋ฅผ ์คํํฉ๋๋ค. ๋ํ ์ต์ ๋ฒ์ ์ Mongoose๋ฅผ ์คํํฉ๋๋ค.
๋ง ๊ทธ๋๋ก ๋๋ฒ๊น
ํ ๋ฐฉ๋ฒ์ด์๋ Error: cyclic dependency detected
๋ฅผ ๋ณด๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ชฝ๊ตฌ์ค๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๋ค. ์ด๋ค ์ ์? ์ค๋ ์์๋์์ต๋๋ค.
/Users/nickparsons/Code/winds-2.0/api/src/node_modules/mongoose/lib/utils.js:417
throw err;
^
Error: cyclic dependency detected
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:296:33)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:618:17)
at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
์ฌ๊ธฐ์ ์๋ ๋ฌธ์ ๋ ๋ฌด์ ์ด์์ต๋๊น?
์ ์ฒด ๊ฐ์ฒด ๋์ ์ ๋ฐ์ดํธํด์ผํ๋ ํ๋๋ฅผ ํฌํจํ์ญ์์ค.
๋๋ ๊ฐ์ ์ฝ๋ ์ค์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
C : UsersRowanOnedrivecodereactgradeablefrontendnode_modulesmongooselibutils.js : 417
์ค๋ฅ๋ฅผ ๋์ ธ;
@ nparsons08 ํ. ๋ฌธ์ ๋ก ํ๋ช ๋์๋์ง, ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์๋์ง (์ด์ ๋ชฝ๊ตฌ์ค ๋ฒ์ ์ผ๋ก ๋ค์ด ๊ทธ๋ ์ด๋ํ๋ ๊ฒ ์ธ์) ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋์ง ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
์ฌ๊ธฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฉฐ ์ถ์ ํ ๋ฐฉ๋ฒ์ด ์ ํ ์์ต๋๋ค.
์ค๋ฅ๊ฐ ์๋ค๊ฐ ์ฌ๋ผ์ง๋๋ค.
Error: cyclic dependency detected
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:296:33)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:618:17)
at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18)
at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17)
at BSON.serialize (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:58:27)
at Query.toBin (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:141:25)
at serializeCommands (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1050:43)
at Pool.write (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1230:3)
at executeWrite (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
at WireProtocol.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
at Server.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:747:35)
at executeWriteOperation (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:899:22)
at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:955:3)
at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb/lib/topologies/topology_base.js:315:25)
at /var/www/node_modules/mongoose/node_modules/mongodb/lib/db.js:1093:21
at handleCallback (/var/www/node_modules/mongoose/node_modules/mongodb/lib/utils.js:128:55)
ํ์ฌ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด.
"ํ์ฌ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ ํจ"์ด ๋๋ฌด ๋ชจํธํ์ฌ ์กฐ์น๋ฅผ ์ทจํ ์ ์๊ธฐ ๋๋ฌธ์์ด๋ฅผ ์ ๊ธ๋๋ค. ์๋ก์ด ์ด์๋ฅผ ์ด๊ณ ์ด์ ํ ํ๋ฆฟ์ ๋ฐ๋ฅด์ญ์์ค.
์๋ค ์, ๋๋ ์์ธ์ ์ฐพ์ ๊ฒ ๊ฐ์์-๋ถ๋ช ํ ๊ทธ๊ฒ์ mongodb 3.6๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค (์ต๊ทผ 3.2์์ 3.6์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ mongoose๋ 5.x๋ก ์ ๊ทธ๋ ์ด๋๋์์ต๋๋ค) ...
๋ ๋ ์ด์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ ์์๋ ๊ทธ๋์, ๋๋์ด ์ํ ์์กด์ฑ ์ค๋ฅ๋ฅผ ์ป๊ณ ์์๋ค ๊ฒ์ ... ๋๋ฅผ ์ํด ์ผ์ํ๋ ์ ์ผํ ์ฃผ์์ ์์
์ ์ถ๊ฐํ๋ ๊ฒ์ด ์์ต๋๋ค autoIndex: false
๋ก mongoose.connect
-ํ์ง๋ง ์ผ์ ๊ทธ๋์ ๋์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ensureIndex()
์ฌ์ฉํ ํ์๋ ๋ด ์ธ๋ฑ์ค๊ฐ ๋ ์ด์ ์์ฑ๋์ง ์์์ต๋๋ค. ๊ฒฐ๊ตญ ๋์ผํ ์ํ ์ข
์์ฑ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ธด ์ด์ผ๊ธฐ ์งง๊ฒ ๋๋ ๋ด ๋ชจ๋ธ ๋ด๋ถ์์ ๋ชจ๋ ์์ฑ INDEX๋ฅผ ์ ๊ฑฐํ๊ณ ๋์ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ธ์ ์ถ๊ฐํ์ฌ ์์ ํ์ต๋๋ค.
์ ์
client: { type: ObjectId, ref: 'tsCli', required: true, index: true },
ํ
client: { type: ObjectId, ref: 'tsCli', required: true },
[...]
Schema.index({ client: 1 });
๊ทธ๋ฆฌ๊ณ ๋ ์ค์ํ ๊ฒ์ ๋ณตํฉ ์ธ๋ฑ์ค์์ INDEX ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค.
์ ์
Schema.index({ client: 1, code: 1 }, { unique: true, index: true, partialFilterExpression: { code: { $type: String } } });
ํ
Schema.index({ client: 1, code: 1 }, { unique: true, partialFilterExpression: { code: { $type: String } } });
์ด๊ฒ์ด ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฑด๋ฐฐ
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ํนํ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
...
tags: {
type: [String],
index: true
}
...
ํด๋น ์ํ / ์์ธ์ ๋ด ์คํค๋ง์ ์ถ๊ฐํ๊ธฐ ๋งํ๋ฉด์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํค์ด @AndrewBarba .. ๋ด๊ฐ ์ธ๊ธ ํ ๊ฒ์ฒ๋ผ ํ๋๊ฐ ์๋๋ผ ์คํค๋ง์ ์์ธ์ ์ถ๊ฐํ๊ณ ์๋ํ๋์ง ํ์ธํ์ญ์์ค.
@gustvao ๋๋ ์ค์ ๋ก ๊ทธ๊ฒ์ ๋จผ์ ์๋ํ์ง๋ง ์ด์ด ์๋ค :(
@AndrewBarba ๋๋์ด ๊ฐ์ ๋ฌธ์ ๊ฐ ์์๋ค. MongoClient๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ฌ์ฉํด์ผํ์ต๋๋ค.
Collection.createIndexes([
{
key: { email: 1 },
name: 'user_email',
unique: true
}
])
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ ์คํธ ์์ธ์ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ๋ฐ์ํฉ๋๋ค.
/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:429
throw err;
^
Error: cyclic dependency detected
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:331:34)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
Emitted 'error' event at:
at done (/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1051:13)
at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1093:16
at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:424:16
at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
at session.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:399:27)
at ClientSession.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/sessions.js:72:41)
at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:397:17)
at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
at handleCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:128:55)
at /Users/ashish/dictionary/js_server/node_modules/mongodb/lib/db.js:1068:25
at executeWrite (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:82:5)
at WireProtocol.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
at Server.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/topologies/server.js:752:35)
๋ด ํ๋์ ํ ์คํธ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ํธ:
WordSchema = new Schema({
title: {
type: String,
required: true,
},
meanings: [MeaningSchema],
keys: [String],
tags: [String],
language: String,
createdAt: Date,
updatedAt: Date
});
WordSchema.index({title: 'text'}); ---> Error
WordSchema.index({title: 1}); ---> Works fine
๋
ธ๋-9.11.1
๋ชฝ๊ตฌ์ค-5.1.1 (5.0.8๊ณผ ๋์ผ)
MongoDB-3.6.2
๋ช ๊ฐ์ง ์ต์
๊ณผ ํจ๊ป mongodb+srv://
uri ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค.
mongodb+srv://user:[email protected]?readPreference=primaryPreferred&retryWrites=true
uri ์ต์ ์ ์ ๊ฑฐํ๋ฉด ๋ค๋ฅธ ์ฝ๋ ๋ณ๊ฒฝ์์ด ๋ฌธ์ ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค.
mongodb+srv://user:[email protected]
ํ์ธํ ์ ์์- retryWrites
์ ๊ฑฐํ๋ฉด "์ด์ " mongodb://
URI๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
์๋ ํ์ธ์ @ vkarpov15 ,
Atlas์ ๋ํ retryWrites ์ ๊ฑฐ์ ์ํฅ์ ๋ฌด์์ ๋๊น? ๋ชฝ๊ตฌ์ค๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ํํ๋ ์์ ์ ๋๊น?
retryWrites์ ๋ํด์ด ๋ฌธ์ ๋ฅผ ์ฝ๋ ๋ค.
https://github.com/Automattic/mongoose/issues/6469 (๊ทธ๋ฐ ๋ค์ ๋ซ์์ต๋๋ค .. ํด๊ฒฐ๋์๋ค๊ณ ์๊ฐํ์ต๋๋ค)
๋ฌธ์ ์ธ์ฌ,
Tarek
์๋
ํ์ธ์
์ต์ ๋ชฝ๊ตฌ์ค ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ ํ์๋์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ด ์คํค๋ง์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ์ด์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋๋ฌด ์ปค์ ์ด๋ค ์ฝ๋ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ง ์ ์ ์์ต๋๋ค. ๋ชฝ๊ตฌ์ค์์๋ ^ 4.13.1์ด ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
์ค๋ฅ๋ฅผ ๋์ ธ;
^
์ค๋ฅ : ์ํ ์ข
์์ฑ์ด ๊ฐ์ง๋์์ต๋๋ค.
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:331:34)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:724:17)
serializeObject (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
BSON.serialize (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:63:28)
Query.toBin (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:144:25)
serializeCommands (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1053:43)
Pool.write (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1269:3)
executeWrite์์ (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
WireProtocol.insert (/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
[nodemon] ์ฑ ์ถฉ๋-์์ํ๊ธฐ ์ ์ ํ์ผ ๋ณ๊ฒฝ ๋๊ธฐ ์ค ...
retryWrites
์ผ๋ฉด์ด ์ถฉ๋์ด ๋ฐ์ํ๋์ง ์กฐ์ฌํ๊ณ ํ์ธํฉ๋๋ค.
์ฐ๊ฒฐ URI์์ &retryWrites=true
์ ์ ๊ฑฐํ๋ฉด ์ค๋ฅ๊ฐ ์์ ๋์์์ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ธ! &retryWrites=true
์ ๊ฑฐํ๋ฉด ์ค๋ฅ๊ฐ ์์ ํ ์์ ๋ฉ๋๋ค.
Atlas์์ ์๋ : ?retryWrites=true
์๋ MongoDB ํด๋ฌ์คํฐ
์๋ ์คํฌ๋ฆฝํธ๋ ๋ก์ปฌ ๋ฐ Atlas ๋ชจ๋์์ ์ ์๋ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๋ฉด ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํ์ญ์์ค.
const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('debug', true);
const { Schema } = mongoose;
run().then(() => console.log('done')).catch(error => console.error(error.stack));
async function run() {
await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');
const M = mongoose.model('Test', new Schema({ name: String }));
await M.create({ name: 'test' });
console.log(await M.findOne());
}
๋ฟก ๋นต๋จ
์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ค๋ฉด ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํ์ญ์์ค.
```const assert = require ( 'assert');
const ๋ชฝ๊ตฌ์ค = require ( 'mongoose');
mongoose.set ( 'debug', true);
const {์คํค๋ง} = ๋ชฝ๊ตฌ์ค;
run (). then (() => console.log ( 'done')). catch (์ค๋ฅ => console.error (error.stack));
๋น๋๊ธฐ ํจ์ run () {
await mongoose.connect ( 'mongodb + srv : // user : [email protected]/test? retryWrites = true', {dbName : 'db-name'});
const M = mongoose.model ( 'Test', new Schema ({name : {type : String, unique : true}}));
await M.create ({์ด๋ฆ : 'ํ
์คํธ'});
console.log (await M.findOne ());
}
```
@mykhaliuk ์์ด ์ฝ๋๋ก :
const mongoose = require('mongoose');
mongoose.set('debug', true);
const { Schema } = mongoose;
run().then(() => console.log('done')).catch(error => console.error(error.stack));
async function run() {
await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true', {dbName:'db-name'});
const M = mongoose.model('Test', new Schema({ name: {type: String, unique: true }}));
await M.create({ name: 'test' });
console.log(await M.findOne());
}
๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. Error: cyclic dependency detected
retryWrites
๋ฅผ ์ ์งํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ mongodb API์ createIndexes
ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
const mongoose = require('mongoose');
mongoose.set('debug', true);
const { Schema } = mongoose;
run().then(() => console.log('done')).catch(error => console.error(error.stack));
async function run() {
await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');
const M = mongoose.model('NewTest', new Schema({ name: {type: String} }));
M.collection.createIndexes([{key: {name: 1}, name: "name", unique: true}])
await M.create({ name: 'test' });
console.log(await M.findOne());
}
๋ฐ๋ผ์ Mongoose ๋ชจ๋ธ ์ ์์์ unique
, index
์ ๊ฑฐํ๊ณ createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/)๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ญ๋๋ค.
Mongoose 4.11.7์์ 5.1.4๋ก ์
๋ฐ์ดํธํ๋ ๊ฒ ์ธ์๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ด ์ฐ๊ฒฐ URI์์ ?retryWrites=true
์ ๊ฑฐ๋ฅผ ์๋ํ์ง๋ง ์ด์ด ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์ง์ _id
์์ฑ์ index:true
์ ์ฌ์ฉํ๊ณ ์์์ ์์ ๋์ต๋๋ค.
_id: {
type: String,
required: true,
index: true
}
index:true
์ ๊ฑฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ๋ํ ํด๊ฒฐ์ฑ
์ ์ธ๊ธํ๋์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค : https://github.com/Automattic/mongoose/issues/2303. ๋ค๋ฅธ ์ฌ๋์ด ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๊ฒ์ํ์ญ์์ค.
์ ์๊ฒ๋ ์ฐ๊ฒฐ ๋ฌธ์์ด์ retryWrites=true
Schema.index({ someKey: 1 })
์ด ์๊ณ ๋ชจ๋ธ์
๋ชฝ๊ณ ์์์ ์คํ db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
๋ฐํ { "featureCompatibilityVersion" : { "version" : "3.6" } }
.
๊ทธ๋ฐ ๋ค์ mongo ์
ธ์์ db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
๋ฅผ ์คํํ์ฌ mongodb์ featureCompatibilityVersion
์ 3.4
๋ก ๋ค์ด ๊ทธ๋ ์ด๋ํ๊ณ featureCompatibilityVersion
retryWrites=true
๋ฐ Schema.index({ someKey: 1 })
๊ณผ ๊ฐ์ด ๋ค์ ์คํํ์ต๋๋ค. ์์ ์ธ๊ธํ๋ฏ์ด.
์ธ๋ฑ์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์์ ํ์ธํ ํ, ๋๋ ์
๊ทธ๋ ์ด๋ ๋ featureCompatibilityVersion
์ 3.6
์คํํ์ฌ MongoDB๋ฅผ์ db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
ํ๊ณ ๋ค์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ์ต๋๋ค. ์ํ ์ข
์์ฑ ์ค๋ฅ๊ฐ ๋ ์ด์ ๋ํ๋์ง ์์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๋ค. Atlas, retryWrites
๋๋ featureCompatibilityVersion
์๋ ๊ด๋ จ์ด ์์ต๋๋ค. _id
์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ต์ ์ฌํ ์คํฌ๋ฆฝํธ :
const mongoose = require('mongoose');
mongoose.set('debug', true);
Error.stackTraceLimit = Infinity;
const { Schema } = mongoose;
run().then(() => console.log('done')).catch(error => console.error(error.stack));
async function run() {
await mongoose.connect('mongodb://localhost:27017/test', {dbName: 'test'});
const M = mongoose.model('Test', new Schema({ _id: { type: String, index: true } }));
await M.create({ _id: 'abc' + Math.random() });
console.log(await M.findOne());
}
์ด๋ฅผ ์ํด mongodb ๋๋ผ์ด๋ฒ์์ PR์ ์ฝ๋ ๋ค.
แ ฒ แ ฒ
๋ ค์ ๐ช
์ฐ๊ฒฐ ๋ฌธ์์ด์์ retryWrites ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ ๊ฑฐํ์ฌ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ ์
mongodb : // sa :
ํ
mongodb : // sa :
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
_id
@otisidev ์์๋ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐํด๋ณด์ญ์์ค. ๋ฐ๋ผ์ new Schema({ _id: {type: String, index: true} })
๋๋ schema.index({ _id: 1 })
์์ผ๋ฉด ์ ๊ฑฐํ์ญ์์ค.
@ vkarpov15 ์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด ํ๋ก์ ํธ์ ์ด๋์๋ _id
์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉฐ URI์์ ?retryWrites
์ ์ ๊ฑฐ ํ ๋๊น์ง์ด ์ค๋ฅ๊ฐ ๊ณ์ ํ์๋์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๊ฒ์
๋๋ค. ์ด์จ๋ ์ด๊ฒ์ Mongoose๊ฐ ์๋ mongodb ๋๋ผ์ด๋ฒ์ ๋ฌธ์ ๋ก ๋ณด์
๋๋ค.
@ vkarpov15 ๋ค์์ _id
์ ์ธ๋ฑ์ค์์ด์ด ๋ฌธ์ ๋ฅผ ์์ฑํ๋ ์คํฌ๋ฆฝํธ์
๋๋ค.
๋ชฝ๊ตฌ์ค : v5.1.5
๋
ธ๋ : v8.11.3
const mongoose = require('mongoose')
const { Schema } = mongoose
async function run() {
try {
await mongoose.connect('mongodb://localhost:27017/test?retryWrites=true', {
dbName: 'mongoose-issue-6109'
})
const Model = mongoose.model('Model', new Schema({
email: {
type: String,
index: {
unique: true
}
}
}))
await Model.create({
email: '[email protected]'
})
console.log(await Model.findOne())
} catch(err) {
console.error(err)
}
}
run()
์์ธ ํ๋๋ฅผ ๋ค์์ผ๋ก ์ค์ :
index: { type: 'hashed', unique: true }
๋ํ ํญ์์ด ๋ฌธ์ ๋ฅผ ์ ๋ฐํฉ๋๋ค.
์, ์ด๊ฒ์ ํฉ๋ฒ์ ์ธ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ์ฝ๋๋ฒ ์ด์ค์์ ์๋ชป๋ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ์ง๋ง ์ฌ์ ํ ์ฌ๋ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค. 5.1.0
๋ค์ด ๊ทธ๋ ์ด๋ํ๋๋ฐ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/Automattic/mongoose/issues/6469 ๋งํฌ-๋ช ๊ฐ์ง ์ฌํ ๋จ๊ณ๊ฐ ๋ ์์ต๋๋ค.
๋๋ ๋ฒ๊ทธ๋ฅผ ๋ณด์๋ค.
_email_ : {
์ ํ : ๋ฌธ์์ด,
ํ์ : true,
_ ๊ณ ์ : ์ฐธ _
},
.......
credentialSchema.index ({ _email_ : 1, ๋๋ฉ์ธ : 1, ipAddress : 1, ๋น๋ฐ๋ฒํธ : -1});
๋ชจ๋ธ ์ ์์์ ๊ณ ์ ๋ฅผ ์ ๊ฑฐํด์ผํ์ต๋๋ค.
@AndrewBarba ์ฌํ https://github.com/mongodb/node-mongodb-native/pull/1758์ ์ฐธ์กฐ
์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง ๋ชจ๋ ๊ฒ์ด ๋ก์ปฌ์์ ์ ์์ด์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ ์ํ๋ฏ์ด ๋น ๋ฅธ ์์ ์ ?retryWrites=true
๋งค๊ฐ ๋ณ์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด๋ฉฐ ์ด์ ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
5.1.8์์ ์์ ๋์ด์ผํฉ๋๋ค.
MongoDB Atlas ๋ฐ GridStore์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. "retryWrites = true"๋ฅผ ์ ๊ฑฐ ํ ๋๊น์ง ์ฐ๊ธฐ ์์ ์ด ์๋ํ์ง ์์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ธํ ์ ์์-
retryWrites
์ ๊ฑฐํ๋ฉด "์ด์ "mongodb://
URI๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.