๊ธฐ๋ฅ ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ ๋ฅผ ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
๋ฒ๋
ํ์ฌ ํ๋์ ๋ฌด์์ ๋๊น?
Model.findByIdAndUpdate()๋ collection.findAndModify๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ mongodb์ ๋ํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํฉ๋๋ค. Mongodb๋ ๋์ findOneAndUpdate, findOneAndReplace ๋๋ findOneAndDelete๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ ์ํฉ๋๋ค.
collection.ensureIndex๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. mongodb๋ ๋์ createIndexes๋ฅผ ์ฌ์ฉํ๋๋ก ์ ์ํฉ๋๋ค.
ํ์ฌ ๋์์ด ๋ฒ๊ทธ์ธ ๊ฒฝ์ฐ ์ฌํ ๋จ๊ณ๋ฅผ ์ ๊ณตํ์ญ์์ค.
Model.findByIdAndUpdate / findOneAndUpdate๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด๋ฌํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์์๋๋ ๋์์ ๋ฌด์์ ๋๊น?
์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์์!
node.js, mongoose ๋ฐ MongoDB ๋ฒ์ ์ ์ธ๊ธํ์ญ์์ค.
๋
ธ๋ v10.8.0
๋ชฝ๊ณ DB v3.6.2
๋ชฝ๊ตฌ์ค v5.2.9
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ํ "์ฐพ๊ธฐ ์ต์ [ํ๋]๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์ดํ ๋ฒ์ ์์ ์ ๊ฑฐ๋ฉ๋๋ค."๋ผ๋ ๋ฉ์์ง๋ ํ์๋ฉ๋๋ค.
(node:13076) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
(node:13076) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
(node:13076) DeprecationWarning: collection.find option [fields] is deprecated and will be removed in a later version.
(node:13076) DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
์ฌ๊ธฐ ๋ด๊ฐ ๊ฐ์ง ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒ๋ค์ด ์์ต๋๋ค.
#6165์ ๊ด๋ จ์ด ์์ผ๋ฉฐ CI ํ ์คํธ ์์ ์ฌํ ๊ฐ๋ฅ
๋ถ๋ถ ์ง์ ์ค๋จ ๋ฉ์์ง๋ฅผ ๋ฐฉ์ง ํ๋ ค๋ฉด useFindAndModify
๋ฅผ false๋ก ์ง์ ํ ์ ์์ต๋๋ค. IMO ์ด์ ๊ธฐ๋ณธ๊ฐ์ด false์ฌ์ผ ํฉ๋๋ค.
mongoose.set('useFindAndModify', false);
๊ทธ๋ฌ๋ ensureIndex(es)
๋ฐ update
$์ ๊ฐ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ค๋ฅธ ๋ฉ์๋๋ ์ API๋ก ๋์ฒดํด์ผ ํฉ๋๋ค. ์ด ์ต์
์ false๋ก ์ค์ ํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์
๋ฐ์ดํธํ๊ณ useFindAndModify
์ต์
์ ์ ๊ฑฐํด์ผ ํฉ๋๊น?
๋ฉ๋ชจ:
MongoDB 3.2+๋ง findOneAndUpdate ์๋ฆฌ์ฆ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง๋ง ๊ธฐ๋ณธ [email protected]
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ ํ findAndModify ํด๋ฆฌํ์ ์ฌ์ฉํ์ฌ 2.6์ผ๋ก ํธํ์ฑ์ ์ ์ง ํ๋ฏ๋ก useFindAndModify
๊ธฐ๋ณธ๊ฐ์ false๋ก ์ค์ ํด๋ ํ์ฌ MongoDB 3.0์ ๋ํ ์ง์์ด ์ค์ ๋ก ์ค๋จ๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด ํธํ์ฑ์ [email protected]
(์์ฃผ ์ค๋์ ) ์ดํ๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋๊ณ ์ด์ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ณง ์ค๋จ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ mongoose(6.x)์ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์๋ MongoDB 3.0 ์ง์์ ์ค๋จํ๊ณ ๋ชจ๋ ์๋ก์ด API๋ฅผ ์ฑํํ ๊ฒ์ ์ ์ํฉ๋๋ค. ๋ํ, MongoDB 3.0์ ๋ฐ๋ ์ ์ธ 2018๋ 2์์ ๋จ์ข ์ ๋๋ฌํ์ต๋๋ค.
์ด๊ฒฌ์๋ ์ฌ๋?
๊ทธ๋์ ... ์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๊น? ๋ค์ ๋ชฝ๊ตฌ์ค ๋ฉ์ด์ ๋ฆด๋ฆฌ์ค๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๊น?
@lpiVasquez ๋ฌธ์์ mongoose 5.x๊ฐ MongoDB Server 3.0์ ์ง์ํ๋ค๊ณ ๋์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ธฐ๋ณธ API๊ฐ ์ฌ์ ํ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ง๊ธ์ ์ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด ๋์์ ๋ณ๊ฒฝํ๋ฉด ์๋ํ์ง ์์ผ๋ฉฐ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ ๋ ๋งค์ฐ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋ด ๋ง์ ๋ฌธ์ ๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ค์ ๋ฆด๋ฆฌ์ค 5.3์์ MongoDB Server 3.0์ ๋ํ ์ง์์ ์ค๋จํ๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ด๋ 5.2์์๋ ์ค๋จํ์ง ๋ง์ญ์์ค. ๋ค๋ง ์ ์๊ฐ์ ๋๋ค.
@IpiVasquez
์ ์ํด,
์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๊น?
๋ค ๋ง ๋ป์,
mongodb๊ฐ ์ด๋ฌํ API๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ์ด์
Mongodb๋ ๋ค์ํ ๋๋ผ์ด๋ฒ API๋ฅผ ๋ณด๋ค ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ค๊ธฐ ์ํ ๊ณํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๊ฒ์ mongodb crud ์ฌ์์ ๋ฌธ์ํ๋์ด ์์ต๋๋ค.
๋ค์ ๋ชฝ๊ตฌ์ค ๋ฉ์ด์ ๋ฆด๋ฆฌ์ค๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๊น?
semver ์ฌ์ ์ ๊ณ ์ํ๋ค๋ฉด @5.3.0
์ ๊ฐ์ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค ๋๋ @5.2.10
์ ๊ฐ์ ํจ์น ๋ฆด๋ฆฌ์ค์ ๋์กฐ์ ์ผ๋ก @6.0.0
์ ๊ฐ์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ API๋ฅผ ๊นจ๋จ๋ฆฌ๋ ๋ชจ๋ ๊ฒ์ด ๋ฐ์ํด์ผ ํฉ๋๋ค. @5.2.10
.
๊ธฐ๋ณธ ๋๋ผ์ด๋ฒ์ ์ญ์ฌ๋ฅผ ๋๋์๋ณด๋ฉด ๋๋ผ์ด๋ฒ์ v4๊น์ง ์ด๋ฌํ ๋ฉ์๋๋ฅผ ์ ๊ฑฐํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์์ต๋๋ค.
๊ทธ๋์ ๋ด๊ฐ ๋ณธ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ์ฌ์ฉ๋์ง ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์์ผ๋ก์จ ์ฌ์ฉ์ ์์ญ์์ ์ํ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์จ๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๋๋ถ๋ถ์ ๋ชฝ๊ตฌ์ค @6.0.0
์์ ์ ๊ฑฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ mongoose์์ ๋ ๋นจ๋ฆฌ ์ฒ๋ฆฌํด์ผ ํ 2๊ฐ์ง ์ฃผ์ ๋ฌธ์ ๋ ์ฟผ๋ฆฌ ์ต์
์์ projections
๋ฅผ fields
๋ก ๋์ฒดํ๊ณ (์ต์ํ ์๋ฒ ๋ฒ์ 3.0.15๋ก ๋ค์ ์๋) ์ ์ฌ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @Fonger ๊ฐ ์ค๋ช
ํ๋ useFindAndModify
์ ๊ธฐ๋ณธ๊ฐ์ ํ๋์ ๋ถ๋ก์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ดํฐ๋ธ ๋๋ผ์ด๋ฒ์ findOneAndUpdate๋ 3.2 ์ด์ ์๋ฒ์ ์ฐ๊ฒฐ๋ ๋ ๋ด๋ถ์ ์ผ๋ก findAndModify๋ฅผ ํธ์ถํ๋ฏ๋ก(์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์์ด) mongoose์ findOneAndUpdate
๋ ์ฌ์ ํ mongodb 3.2 ๋ฐ useFindAndModify: false
์์ ์๋ํฉ๋๋ค. ์ด ์์์ ๋ณด์ฌ์ฃผ๋ฏ์ด:
#!/usr/bin/env node
'use strict';
const mongoose = require('mongoose');
mongoose.set('useFindAndModify', false);
const url = 'mongodb://localhost:27017/test';
const opts = { useNewUrlParser: true };
mongoose.connect(url, opts);
const conn = mongoose.connection;
const Schema = mongoose.Schema;
const schema = new Schema({
name: String
});
const Test = mongoose.model('test', schema);
async function run() {
await conn.dropDatabase();
let admin = conn.db.admin();
let { version } = await admin.serverInfo();
console.log(`mongodb: ${version}`);
console.log(`mongoose: ${mongoose.version}`);
let cond = {};
let update = { name: 'Sarah' };
let opts = {
upsert: true,
new: true
};
let sarah = await Test.findOneAndUpdate(cond, update, opts);
console.log(sarah);
return conn.close();
}
run();
issues: ./6880.js
mongodb: 3.0.15
mongoose: 5.2.9
{ _id: 5b779ca8d1326ce227b6869f, __v: 0, name: 'Sarah' }
issues:
๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ ๋๋ผ์ด๋ฒ๋ง์ผ๋ก ์ด๋ฅผ ์์ฐํ ์๋ ์์ต๋๋ค.
#!/usr/bin/env node
'use strict';
const { MongoClient, Logger } = require('mongodb');
const uri = 'mongodb://localhost:27017/test';
const opts = {
useNewUrlParser: true
};
async function run() {
const client = new MongoClient(uri, opts);
await client.connect();
const db = client.db('gh-6881');
await db.dropDatabase().catch(handleError);
Logger.setLevel('debug');
let res = await db
.collection('tests')
.findOneAndUpdate({}, { $set: { name: 'michael' } }, { upsert: true })
.catch(handleError);
Logger.setLevel('error');
console.log(res);
let doc = await db
.collection('tests')
.findOne({})
.catch(handleError);
console.log(doc);
process.exit(0);
}
run();
function handleError(e) {
return console.error(e.message);
}
...
message: 'executing command [{"ns":"gh-6881.$cmd","cmd":{"findAndModify":"tests","query":{},"new":false,"remove":false,"upsert":true,"update":{"$set":{"name":"michael"}}},"options":{}}] against localhost:27017',
...
{ value: null,
lastErrorObject:
{ updatedExisting: false,
n: 1,
upserted: 5b77a23cd1326ce227b686a1 },
ok: 1 }
{ _id: 5b77a23cd1326ce227b686a1, name: 'michael' }
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ ์์ ์ ๋ค์ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
(node:9856) DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
(node:9856) DeprecationWarning: collection.find option [fields] is deprecated and will be removed in a later version.
(node:9856) DeprecationWarning: collection.find option [fields] is deprecated and will be removed in a later version.
์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๊ท์ฐฎ๋ค๋ฉด _ ์์_ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก --no-deprecation
๋ฅผ ์ฌ์ฉํ์ฌ cli์์ node.js ํ๋ก์ธ์ค๋ฅผ ์์ํ์ฌ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ์ง ์์ ์ ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ _๊ถ์ฅํ์ง ์์ต๋๋ค_.
๋์ ํจ๊ป:
(node:1) DeprecationWarning: collection.findAndModify is deprecated. Use findOneAndUpdate, findOneAndReplace or findOneAndDelete instead.
(node:1) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
(node:1) DeprecationWarning: collection.update is deprecated. Use updateOne, updateMany, or bulkWrite instead.
(node:1) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
(node:1) DeprecationWarning: collection.find option [fields] is deprecated and will be removed in a later version.
(node:1) DeprecationWarning: collection.find option [fields] is deprecated and will be removed in a later version.
๊ทธ ์ด๋ ๋๋ณด๋ค package-lock.json์ ์ฌ๋ํฉ๋๋ค...
์ด๋ฌํ ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1) ์ฌ: findOneAndUpdate()
๋ฐ findAndModify()
์ง์ ์ค๋จ, mongoose.set('useFindAndModify', false);
์ฌ์ฉ
2) Re: remove()
์ง์ ์ค๋จ, ํ๋์ ๋ฌธ์๋ง ์ญ์ ํ ๊ฒ์ธ์ง์ ๋ฐ๋ผ deleteOne()
๋๋ deleteMany()
์ฌ์ฉ์ผ๋ก ์ ํ
3) ์ฌ: update()
์ง์ ์ค๋จ, updateMany()
๋ก ๋์ฒด
์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ด ์ด๋ฌํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ๋ฌธ์๋ฅผ ์ถ๊ฐํ๊ณ mongoose๊ฐ ์ด๋ฌํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ค ํ๋๋ฅผ ์ผ์ผํค์ง ์๋๋ก ๋ด๋ถ ๋ณ๊ฒฝ์ ์ํํ ๊ฒ์ ๋๋ค.
๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ useFindAndModify ์ต์ ์ ์ ๊ฑฐํด์ผ ํฉ๋๊น?
๋๋ ์ด๊ฒ์ ์ฐฌ์ฑํ ๊ฒ์ด๋ค ๐
mongoose๋ ์ด๋ฏธ deleteOne()
, deleteMany()
, updateMany()
๋ฑ์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ง์ํฉ๋๊น?
+1
๊ฐ์ ๊ฒฝ๊ณ . ์ ๋๋ผ์ด๋ฒ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ง๊ธ ๋น์ฅ ์ฐ๋ฆฌ๋ ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๊น? ๋ด ๋ง์ API๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋๋ฐ db์์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์์ผํ๊ณ collection.find().then()....etc๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋์ผํ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค. ๊ทธ find() ๋ฉ์๋๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋ฌด์์ ํ ์ ์์ต๋๊น?
๊ฒฝ๊ณ ๊ฐ ๊ท์ฐฎ๋ค๋ฉด Node์์ ์ง์ ์ค๋จ ์๋ฆผ์ ๋นํ์ฑํํ๊ฑฐ๋(์์ Fonger ์ฃผ์ ์ฐธ์กฐ) Mongoose์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆด ์ ์์ต๋๋ค.
๊ทธ๋์ ๋ด๊ฐํด์ผ ํ ์ผ์ ๋ฌด์์ ๋๊น?
์ฐพ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋๋ง๋ค mongoose์์ ์ด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฐ์์ต๋๋ค. ๋ชฝ๊ตฌ์ค ํ์์ ๋ค์ ์ ๋ฐ์ดํธ๊น์ง ๋ฌด์ํ ๊ฒ์ ๋๋ค.
(node:15500) DeprecationWarning: collection.find ์ต์ [fields]๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์ดํ ๋ฒ์ ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
fields
์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ๋ํ ์์ ์ฌํญ์ 5.2.10์ ์์ผ๋ฉฐ ๋ ์ด์ ํ์๋์ง ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ ๋ฆฌํ๋ ค๋ฉด ์ด ์ฃผ์์ ์ง์นจ์ ๋ฐ๋ฅด์ธ์. https://github.com/Automattic/mongoose/issues/6922#issue -354147871
์ด ๋ฌธ์๋ฅผ ์์ฑํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค https://mongoosejs.com/docs/deprecations.html
๋ค์: findOneAndUpdate()
๋ฐ findAndModify()
์ฌ์ฉ ์ค๋จ, ํ์ฌ( 5.2.17
) ์ ์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์์ ์ค์ ํ๋ ๊ฒ์
๋๋ค.
mongoose.set('useFindAndModify', false);
๊ทธ๊ฒ ์ฌ์ค์ด์ผ?
Model.findByIdAndUpdate()
๋ฐ Model.findOneAndUpdate()
๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค.
mongoose์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ mongo db ๋๋ผ์ด๋ฒ ๊ธฐ๋ฅ์ ์ด๋ ์์ ์์ ์
๋ฐ์ดํธ๋์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ด๊ฐ ๋ง์๊น?
+1 Model.findByIdAndUpdate() ์ฌ์ฉ์ ๋ํด ๋์ผํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค.
๋ค์ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น?
@gianpaj yes mongoose.set('useFindAndModify', false)
๋ findAndModify ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ๋ํ ์ ์ผํ ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค. ๋ด ์๊ฐ ์ collection.findAndModify()
์ ๋ํ ๊ธฐ๋ณธ ํธ์ถ์ [email protected]์์ ์ฌ๋ผ์ง ๊ฒ์
๋๋ค. @vkarpov15 ๊ทธ ๋ง์ด ๋ง๋์? ์๋๋ฉด ์๊ฐ ํ๋ ์์ ์ฝ์ํ๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด๋์?
@daniyalawan ์ฌ๊ธฐ์์ ๋ฌธ์๋ฅผ ํ์ธ ํ์ธ์. ์ฝ๋์์ findOneAndUpdate
๋ฅผ ํธ์ถํ๋ฉด 'useFindAndModify' ์ต์
์ด ์ ์ฉ๋ฉ๋๋ค(๋ด๋ถ์ ์ผ๋ก findOneAndUpdate๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ findByIdAndUpdate๋ก ํ์ฅ๋ฉ๋๋ค).
@Sastidar [email protected]๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์ด๋ค ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๋ชจ๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ์ด ๋ฌธ์์์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
@lineus @gianpaj ๋ค, useFindAndModify ์ต์ ์ ๋ํ ํ์์ฑ์ Mongoose 6.0.0๊ณผ ํจ๊ป ์ฌ๋ผ์ง ๊ฒ์ ๋๋ค. Mongoose 6์ ์ถ์ํ ์ผ์ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ๊ด๋ จํ์ฌ - mongoose๊ฐ findByIdAndUpdate
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋จ๊ณ์ ์ผ๋ก ์ค๋จํ ์์ ์
๋๊น, ์๋๋ฉด ๊ธฐ๋ณธ findAndModify
๊ฐ ๋ด ๊ตฌํ์ ์ค๋จํ์ง ์๊ณ ๋จ๊ณ์ ์ผ๋ก ์ ๊ฑฐ๋ ์์ ์
๋๊น?
๊ธฐ๋ณธ์ ์ผ๋ก ๋ ํฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฐ๊ธฐ ์ ์ findByIdAndUpdate
๋ฅผ ๋ชจ๋ findOneAndUpdate
๋ก ๋ณ๊ฒฝํ๋์ง ๋ฌป๊ณ ์์ต๋๋ค.
@gianpaj yes
mongoose.set('useFindAndModify', false)
๋ findAndModify ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ๋ํ ์ ์ผํ ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ด ์๊ฐ ์collection.findAndModify()
์ ๋ํ ๊ธฐ๋ณธ ํธ์ถ์ [email protected]์์ ์ฌ๋ผ์ง ๊ฒ์ ๋๋ค. @vkarpov15 ๊ทธ ๋ง์ด ๋ง๋์? ์๋๋ฉด ์๊ฐ ํ๋ ์์ ์ฝ์ํ๊ธฐ์๋ ๋๋ฌด ์ด๋ฅด๋์?@daniyalawan ์ฌ๊ธฐ์์ ๋ฌธ์๋ฅผ ํ์ธ ํ์ธ์. ์ฝ๋์์
findOneAndUpdate
๋ฅผ ํธ์ถํ๋ฉด 'useFindAndModify' ์ต์ ์ด ์ ์ฉ๋ฉ๋๋ค(๋ด๋ถ์ ์ผ๋ก findOneAndUpdate๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ findByIdAndUpdate๋ก ํ์ฅ๋ฉ๋๋ค).@Sastidar [email protected]๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์ด๋ค ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๋ชจ๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ์ด ๋ฌธ์์์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
$#$ mongoose.set('useFindAndModify', false)
๋ฅผ ์ฌ์ฉํ๋ฉด {new: true}
๊ฐ ์๋ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์ต์
์ด ์์ต๋๊น?
@ anks333 ๋ค์ ์๊ฐ ์ ์๊ฒ ํจ๊ณผ์ ์
๋๋ค. { new: true }
๊ฐ ์๋ํ์ง ์์์ ํ์ํ๋๋ก ์์ ํ ์ ์์ต๋๊น?
#!/usr/bin/env node
'use strict';
const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('useFindAndModify', false);
const { Schema, connection} = mongoose;
const DB = '6880';
const URI = `mongodb://localhost:27017/${DB}`;
const OPTS = { family: 4, useNewUrlParser: true };
const schema = new Schema({
name: String
});
const Test = mongoose.model('test', schema);
const test = new Test({ name: 'test1' });
async function run() {
await mongoose.connect(URI, OPTS);
await connection.dropDatabase();
const doc = await Test.create(test);
assert.ok(doc);
const cond = {};
const update = { name: 'test2' };
const options = { new: true };
const updated = await Test.findOneAndUpdate(cond, update, options);
assert.strictEqual(updated.name, 'test2');
console.log('All Assertions Pass.');
await connection.close();
}
run();
issues: ./6880.js
All Assertions Pass.
issues:
@LBWright ์ฐ๋ฆฌ๋ findByIdAndUpdate์ ๋ํ ์ง์์ ์ค๋จํ ์๊ฐ์ด ์์ต๋๋ค. API๋ฅผ ์ค๋จํ์ง ์๊ณ ๊ธฐ๋ณธ findAndModify๋ง ๊ต์ฒดํ ๊ฒ์ ๋๋ค.
(node:10767) DeprecationWarning: collection.ensureIndex๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ createIndexes๋ฅผ ์ฌ์ฉํ์ญ์์ค.
@jonaspereilar https://mongoosejs.com/docs/deprecations.html
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ํ "์ฐพ๊ธฐ ์ต์ [ํ๋]๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์ดํ ๋ฒ์ ์์ ์ ๊ฑฐ๋ฉ๋๋ค."๋ผ๋ ๋ฉ์์ง๋ ํ์๋ฉ๋๋ค.