Mongoose: ์˜ค๋ฅ˜ : ์ˆœํ™˜ ์ข…์†์„ฑ์ด ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 02์›” 08์ผ  ยท  40์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

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)
confirmed-bug underlying library issue

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ- retryWrites ์ œ๊ฑฐํ•˜๋ฉด "์ด์ „" mongodb:// URI๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  40 ๋Œ“๊ธ€

์—ฌ๊ธฐ์„œ ์›๋ž˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡ ์ด์—ˆ์Šต๋‹ˆ๊นŒ?

์ „์ฒด ๊ฐœ์ฒด ๋Œ€์‹  ์—…๋ฐ์ดํŠธํ•ด์•ผํ•˜๋Š” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋„ ๊ฐ™์€ ์ฝ”๋“œ ์ค„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
C : UsersRowanOnedrivecodereactgradeablefrontendnode_modulesmongooselibutils.js : 417
์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ;

@ nparsons08 ํ•‘. ๋ฌธ์ œ๋กœ ํŒ๋ช…๋˜์—ˆ๋Š”์ง€, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋Š”์ง€ (์ด์ „ ๋ชฝ๊ตฌ์Šค ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ ์™ธ์—) ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฉฐ ์ถ”์  ํ•  ๋ฐฉ๋ฒ•์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๊ฐ€ ์™”๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

image

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 :@ cluster0-shard-00-00-ljpyb.mongodb. net : 27017 , cluster0-shard-00-01-ljpyb.mongodb. net : 27017 , cluster0-shard-00-02-ljpyb.mongodb. net : 27017 / test? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin & retryWrites = true

ํ›„
mongodb : // sa :@ cluster0-shard-00-00-ljpyb.mongodb. net : 27017 , cluster0-shard-00-01-ljpyb.mongodb. net : 27017 , cluster0-shard-00-02-ljpyb.mongodb. net : 27017 / test? ssl = true & replicaSet = Cluster0-shard-0 & authSource = admin

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

_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"๋ฅผ ์ œ๊ฑฐ ํ•  ๋•Œ๊นŒ์ง€ ์“ฐ๊ธฐ ์ž‘์—…์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰