κΈ°λ₯ μ μμ²νκ±°λ λ²κ·Έλ₯Ό λ³΄κ³ νμκ² μ΅λκΉ?
λ²κ·Έ μ κ³
νμ¬ νλμ 무μμ λκΉ?
λ‘컬 μμ€ν μμλ ν μ€νΈ ν΅κ³Όνμ§λ§ μ νν λμΌν λ²μ μ μ ν¨μ€ μλ²μμλ μ€ν¨ν©λλ€. μ μΌν μ°¨μ΄μ μ λ΄κ° λ§ν μμλ ν λ‘컬μ macosμ΄κ³ jenkinsλ μ°λΆν¬μ λλ€.
MacOS Sierra, λ Έλ 8.4 λ° 7.11, mongodb 3.4.7 λ° mongoose 4.11.7μμ λ€μ ν μ€νΈλ ν΅κ³Όνμ§λ§ ubuntu 16.04 μλ²μ λκ°μ λ²μ μ μ ν¨μ€ μλ²μμλ μ€ν¨ν©λλ€.
it("should successfully allow an alias that matches a service", async () => {
const aliasTag = "this is a test";
const appAlias = await AliasController.create(user, appAliasSpec);
const serviceAlias = await AliasController.create(user, serviceAliasSpec);
appAlias.aliases.push(aliasTag);
await appAlias.save(); // This is the line that fails in jenkins
serviceAlias.aliases.push(aliasTag);
await serviceAlias.save();
const confAppAlias = await AliasController.getById(appAlias._id);
const confServiceAlias = await AliasController.getById(serviceAlias._id);
expect(confAppAlias.aliases[1]).to.equal(aliasTag);
expect(confServiceAlias.aliases[1]).to.equal(aliasTag);
});
λ΄κ° μ»λ μ νν μ€λ₯λ λ€μκ³Ό κ°μ΅λλ€.
{
"message": "Unknown modifier: $pushAll",
"name": "MongoError",
"stack": "MongoError: Unknown modifier: $pushAll\n at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)\n at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18\n at _combinedTickCallback (internal/process/next_tick.js:131:7)\n at process._tickCallback (internal/process/next_tick.js:180:9)",
"code": 9
}
νΈμ§: λ€μμ μ€ν μΆμ μ λ μ½κΈ° μ¬μ΄ λ²μ μ λλ€.
MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
mongoose.set('debug', true)
νκ³ mongo μΆλ ₯μ λΆμ¬λ£μ μ μμ΅λκΉ?
νΈμ§: λ λͺ νν μΆλ ₯
Mongoose: aliases.update({ _id: ObjectId("599d98122b72d12e0ba858b4") }, { '$pushAll': { aliases: [ 'this is a test' ] }, '$set': { updatedAt: new Date("Wed, 23 Aug 2017 14:58:26 GMT") }, '$inc': { __v: 1 } })
{"name":"davis","hostname":"ld-ub-bm980a98v","pid":11787,"level":50,"err":{"message":"Unknown modifier: $pushAll","name":"MongoError","stack":"MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)","code":9},"msg":"An unhandled Mongo error occurred.","time":"2017-08-23T14:58:26.201Z","v":0}
κ·Έ κ°μΉλ₯Ό μν΄ λ‘컬 κ°λ° λ° νλ‘λμ νκ²½μμ λλ²κ·Έ μΆλ ₯μ νμΈνμΌλ©° λ λ€ $pushAll μμ μλ₯Ό μ±κ³΅μ μΌλ‘ μ¬μ©νκ³ μμ΅λλ€. Mongoλ λͺ¨λ κ²½μ°μ 곡μ ν¨ν€μ§μμ μ€μΉλ©λλ€. κ°λ° λ¨Έμ μ μλμ°μ λ§₯OS, νλ‘λμ λ¨Έμ μ μλ§μ‘΄ 리λ μ€μ λλ€.
mongo μ
Έμ μ¬μ©νμ¬ jenkins mongodb μΈμ€ν΄μ€μ μ°κ²°νκ³ db.version
μ¬μ©νμ¬ λ²μ μ λ€μ νμΈν μ μμ΅λκΉ?
$ mongo test
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.1
> db.version()
3.4.1
> ^C
bye
mongooseλ₯Ό μ¬μ©νμ¬ serverStatus()
λͺ
λ Ήμ μ¬μ©νμ¬ μλ² λ²μ μ μΈμν μλ μμ΅λλ€.
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
mongoose.connection.on('open', function() {
mongoose.connection.db.admin().serverStatus(function(error, info) {
console.log(info.version);
});
});
λ¨Όμ λ²μ μ λ€μ νμΈνμμμ€. 곡μ ν¨ν€μ§λ λ§€μ° λΉ¨λ¦¬ ꡬμμ΄ λλ κ²½ν₯μ΄ μμ΅λλ€.
λ€, κ°μ μ€λ₯κ° μμ΅λλ€. 3.2μμ 3.5λ‘ μ΄λνλ €κ³ νμ΅λλ€(λ°μ΄ν° λ§μ΄κ·Έλ μ΄μ μμ). λ°°μ΄ νλκ° μμ΅λλ€.
'liked': {
'item':[ {
'id': {'type': Types.ObjectId, 'ref': 'Item'},
'score': {'type': Number, 'max': 100, 'default': -1},
'comment': {'type': String, 'maxlength': 65000, 'trim': true, 'default': '', 'set': san.methods.safe}
} ]
},
id
κ° μ΅κ³ μ νλ μ΄λ¦μ μλμ§λ§ 3.2μμ μλνμ΅λλ€. 3.5μμλ νλͺ©μ΄ λ°°μ΄λ‘ νΈμλ ν λ¬Έμλ₯Ό .save()
μλν ν μ€ν¨ν©λλ€. .push()
λ₯Ό ν΅ν΄ νλͺ©μ νΈμν λ€μ .markModified('liked.item');
νλλ₯Ό νμν©λλ€. κ°λ¨ν΄μΌ ν©λλ€.
λͺ½κ³ DB 3.5?
μ
targetMinOS: Windows 7/Windows Server 2008 R2
db version v3.5.13
git version: 52bbaa007cd84631d6da811d9a05b59f2dfad4f3
OpenSSL version: OpenSSL 1.0.1u-fips 22 Sep 2016
allocator: tcmalloc
modules: none
build environment:
distmod: 2008plus-ssl
distarch: x86_64
target_arch: x86_64
κ·Έκ² ν κ°μ§ λ¬Έμ μ λλ€. mongodb 3.5λ λΆμμ ν κ°λ° 릴리μ€μ΄λ―λ‘ μ¬μ©ν΄μλ μ λ©λλ€. $pushAllμ μ€λ«λμ λ μ΄μ μ¬μ©λμ§ μμΌλ―λ‘ μλ§λ 3.5μμ μ κ±°λμμ κ²μ λλ€. @mbroadst λͺ νν ν μ μμ΅λκΉ?
μ°λ¦¬λ μΆκ° usePushEach
μ΄κ²μ ν΄κ²°νλ €λ©΄ μ΅μ
μ λ€μ μ μ : https://github.com/Automattic/mongoose/issues/4455 ,μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌνλ€ :
new Schema({ arr: [String] }, { usePushEach: true });
@vkarpov15 μ featureCompatibilityVersion=3.6
λν΄ μ κ±°λμμ΅λλ€.
λ§μ§λ€. μ΄ κ²½μ° #5670μ μ κ±°ν΄μΌ ν©λλ€.
λ΄ μ°λΆν¬μμ mongodb v3.6μ μ¬μ©νλ κ²κ³Ό λκ°μ λ¬Έμ κ° μμ΅λλ€. pushAllμ΄ dbμμ μ κ±°λ κ²½μ° μΈμ€ν΄μ€λ₯Ό μ μ₯νλ λ°©λ²λ³΄λ€.. λμμ μλ €μ£ΌμΈμ.
@rankitbishnoi μ΅μ
μ κ° μ€ν€λ§ μ μμ usePushEach
μ΅μ
μ μΆκ°νμ¬ μΌμμ μΌλ‘ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
@vkarpov15 νμμ μΈ λΌμ΄λΈλ¬λ¦¬μ κ°μ¬λ립λλ€.
μ λ Mongoose 4.13.7 λ° MongoDB 3.6.0μμ μ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μμ΅λλ€.
μ
λ°μ΄νΈ: λͺ¨λΈμ μ€ν€λ§ μ΅μ
μ usePushEach: true
λ₯Ό μΆκ°νλ©΄ μ΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
@dyladan @chaddjohnsonμ μ λ§ ν¨κ³Όκ° μμ΅λλ€.
μ λ§ κ°μ¬ν©λλ€!
μ΄λ»κ² νλ©΄ λ κΉμ? μ΄κ²μ μ€ν€λ§ μ΅μ μ μ΄λ»κ² μΆκ°ν μ μμ΅λκΉ? κ°μ¬ ν΄μ!
@raphaelbp12 μ€ν€λ§ μ΅μ μ¬μ©μ λν λ¬Έμλ λ€μκ³Ό κ°μ΅λλ€. http://mongoosejs.com/docs/guide.html
μ€ν€λ§λ₯Ό μ λ°μ΄νΈν΄λ μ΄ λμμ λ³κ²½λμ§ μμ΅λλ€. μ΄λ―Έ 3.6μμ λ°μ΄ν°λ² μ΄μ€μ μ΄μ λ°μ΄ν°μλ μλνμ§ μμ΅λλ€.
νΈμ§: λ²μ 3.4λ‘ λλ리면 λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
λ΄ μ»΄ν¨ν°μμ μ½λλ₯Ό μ€ννλ κ²κ³Ό λΉμ·ν λ¬Έμ κ° λ°μνμ΅λλ€. Mongoose 5μ MongoDB 3.6 λλ¬Έμ΄λΌκ³ μκ°ν©λλ€. λλ리기 μλ:
npm install [email protected] --save
)λ‘,db.version()
μ
λ ₯νμ¬ λ²μ μ νμΈν μ μμ).κ·Έκ²μ λλ₯Ό μν΄ μΌνμ΅λλ€! :)
Mongoose 5λ μ΄ λ¬Έμ μ μν₯μ λ°μ§ μμμΌ νλ©° μ΄λμλ $pushAll
μ¬μ©νμ§ μμ΅λλ€. mongoose 5μμ μ΄ μ€λ₯κ° λ°μνλ©΄ μ½λ μνμ λ¬Έμ λ₯Ό μ κΈ°νμΈμ. +1:
PS C:\Users\paula\projetos\apiNode\src> λ
Έλ index.js
{ MongoError: μ μ μλ μμ μ: $pushAll
Function.MongoError.createμμ (C:\Users\paula\projetos\apiNode\node_modules\mongodb-core\lib\error.js:31:11)
toErrorμμ (C:\Users\paula\projetos\apiNode\node_modules\mongodb\lib\utils.js:139:22)
C:\Users\paula\projetos\apiNode\node_modules\mongodb\lib\collection.js:1059:67
C:\Users\paula\projetos\apiNode\node_modules\mongodb-core\lib\connection\pool.js:469:18
_combinedTickCallbackμμ (λ΄λΆ/νλ‘μΈμ€/next_tick.js:131:7)
process._tickCallbackμμ (λ΄λΆ/νλ‘μΈμ€/next_tick.js:180:9)
μ΄λ¦: 'λͺ½κ³ μ€λ₯',
λ©μμ§: 'μ μ μλ μμ μ: $pushAll',
λλΌμ΄λ²: μ¬μ€,
μΈλ±μ€: 0,
μ½λ: 9
μλ νμΈμ μ¬λ¬λΆ, Unknown modifier: $ pushAll μ€λ₯ μμ λ°©λ²μ μλ €μ£ΌμΈμ.
ΠΡΠΎΠ±ΠΎΠ²Π°Π» Π²ΠΎΡ ΡΠ°ΠΊ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
const mongoose = νμ('λͺ½κ΅¬μ€')
const Π‘Ρ
Π΅ΠΌΠ° = mongoose.Schema
const UserSchema = μ μ€ν€λ§({
ν
λ κ·Έλ¨ μμ΄λ: {
μ ν: λ²νΈ,
νμ: μ¬μ€,
usePushEach: μ°Έ
},
μν: {
μ ν: [λ¬Έμμ΄],
κΈ°λ³Έ: []
}
})
mongoose.model('μ¬μ©μ', UserSchema)
@rivers-lis λ€μκ³Ό κ°μ΄ μ€ν€λ§κ° μλ μ€ν€λ§ μ΅μ
μ usePushEach
λ₯Ό μΆκ°ν΄μΌ ν©λλ€.
new Schema({ ... }, { usePushEach: true });
μΉ΄ν¬ ΡΠΎ Π²ΠΎΡ ΡΠ°ΠΊ
const λͺ½κ΅¬μ€ = μꡬ('λͺ½κ΅¬μ€')
const μ€ν€λ§ = mongoose.Schema
const μ¬μ©μ μ€ν€λ§ = μ μ€ν€λ§({
ν
λ κ·Έλ¨ μμ΄λ: {
μ ν: λ²νΈ,
νμ: μ¬μ€
},
films: {
type: [String],
default: []
}
})
μ μ€ν€λ§({}, {usePushEach: true})
mongoose.model('μ¬μ©μ', μ¬μ©μ μ€ν€λ§)
new Schema({ ... }, { usePushEach: true });
μ΄κ²μ λ²μ 4.4.12 λ° 5.0.7μμλ μ€λ₯λ₯Ό ν΄κ²°ν©λλ€.
μΉ΄ν¬ ΡΠΎ Π²ΠΎΡ ΡΠ°ΠΊ
const λͺ½κ΅¬μ€ = μꡬ('λͺ½κ΅¬μ€')
const μ€ν€λ§ = mongoose.Schemaconst μ¬μ©μ μ€ν€λ§ = μ μ€ν€λ§({
ν λ κ·Έλ¨ μμ΄λ: {
μ ν: λ²νΈ,
νμ: μ¬μ€
},films: { type: [String], default: [] }
})
μ μ€ν€λ§({}, {usePushEach: true})
mongoose.model('μ¬μ©μ', μ¬μ©μ μ€ν€λ§)
μ£μ‘ν©λλ€ λ¬μμμ΄λ₯Ό μ½μ μ μμ΅λλ€
@DanGDroidλ λλ΅ "ΠΠ°ΠΊ ΡΠΎ Π²ΠΎΡ ΡΠ°ΠΊ" -> "Something like this"λ₯Ό λ²μνμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
κ·Έκ² ν κ°μ§ λ¬Έμ μ λλ€. mongodb 3.5λ λΆμμ ν κ°λ° 릴리μ€μ΄λ―λ‘ μ¬μ©ν΄μλ μ λ©λλ€. $pushAllμ μ€λ«λμ λ μ΄μ μ¬μ©λμ§ μμΌλ―λ‘ μλ§λ 3.5μμ μ κ±°λμμ κ²μ λλ€. @mbroadst λͺ νν ν μ μμ΅λκΉ?
μ°λ¦¬λ μΆκ°
usePushEach
μ΄κ²μ ν΄κ²°νλ €λ©΄ μ΅μ μ λ€μ μ μ : https://github.com/Automattic/mongoose/issues/4455 ,μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌνλ€ :