Apakah Anda ingin meminta fitur atau melaporkan bug ?
Laporkan bug
Apa perilaku saat ini?
Tes lulus di mesin lokal tetapi gagal di server jenkins dengan versi yang sama persis. Satu-satunya perbedaan adalah lokal adalah macos dan jenkins adalah ubuntu sejauh yang saya tahu.
Di MacOS Sierra, node 8.4 dan 7.11, mongodb 3.4.7, dan luwak 4.11.7 tes berikut lulus, tetapi pada server jenkins kami dengan versi yang sama persis di server ubuntu 16.04 gagal.
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);
});
Inilah kesalahan persis yang saya dapatkan:
{
"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
}
edit: Ini adalah versi jejak tumpukan yang lebih mudah dibaca
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)
dapatkah Anda melakukan mongoose.set('debug', true)
dan menempelkan output mongo?
edit: keluaran lebih jelas
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}
Untuk apa nilainya, saya memeriksa keluaran debug di lingkungan pengembangan dan produksi lokal kami dan keduanya berhasil menggunakan pengubah $pushAll. Mongo diinstal dari paket resmi dalam semua kasus. Mesin pengembangan adalah windows dan MacOS, mesin produksi adalah amazon linux.
Bisakah Anda terhubung ke instance jenkins mongodb Anda menggunakan shell mongo dan memeriksa ulang versinya menggunakan 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
Anda juga dapat mencetak versi server menggunakan perintah serverStatus()
menggunakan luwak:
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);
});
});
Silakan periksa versi Anda terlebih dahulu, paket resmi cenderung cepat ketinggalan zaman.
ya, memiliki kesalahan yang sama. mencoba berpindah dari 3,2 ke 3,5 (tidak ada migrasi data). Saya memiliki bidang array
'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}
} ]
},
Saya tahu, id
bukan nama bidang terbaik, tapi hei, ini berhasil di 3.2. Dalam 3.5 gagal setelah mencoba .save()
dokumen setelah Item didorong ke dalam array. Saya mendorong item melalui .push()
dan kemudian menandai bidang .markModified('liked.item');
. harus sederhana.
MongoDB 3.5?
Ya
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
Nah itu salah satu masalahnya, mongodb 3.5 adalah rilis dev yang tidak stabil dan tidak boleh digunakan. $pushAll telah ditinggalkan untuk waktu yang lama jadi mungkin mereka menyingkirkannya dalam 3.5. @mbroadst dapatkah Anda mengklarifikasi?
Kami menambahkan opsi usePushEach
untuk mengatasi ini beberapa waktu lalu: https://github.com/Automattic/mongoose/issues/4455 , yang seharusnya menjadi solusi untuk masalah ini:
new Schema({ arr: [String] }, { usePushEach: true });
@vkarpov15 ya sudah dihapus untuk featureCompatibilityVersion=3.6
sentuh. Dalam hal ini kami akan memastikan untuk mengeluarkan #5670.
saya mengalami masalah yang sama persis dengan saya menggunakan mongodb v3.6 di ubuntu saya. jika pushAll dihapus dari db daripada bagaimana saya harus menyimpan instance .. tolong berikan saya alternatif apa pun
@rankitbishnoi Anda dapat menyiasatinya untuk sementara dengan menambahkan opsi usePushEach
pada setiap definisi skema dalam opsi.
@vkarpov15 Terima kasih atas perpustakaan yang fantastis, Pak.
Saya juga mengalami masalah ini dengan Mongoose 4.13.7 dan MongoDB 3.6.0.
PEMBARUAN: Menambahkan usePushEach: true
ke opsi skema untuk model menyelesaikan ini.
@dyladan @chaddjohnson benar-benar berfungsi.
Terima kasih banyak!
tolong, bagaimana saya bisa melakukan ini? bagaimana saya bisa menambahkan ini ke opsi skema? Terima kasih!
@raphaelbp12 Berikut adalah dokumen tentang penggunaan opsi skema: http://mongoosejs.com/docs/guide.html
Memperbarui skema tidak mengubah perilaku ini. Ini tidak berfungsi untuk data lama dalam database untuk 3.6.
Sunting: Mengembalikan kembali ke versi 3.4 memecahkan masalah.
Saya mengalami masalah serupa saat menjalankan kode di mesin saya. Saya pikir itu karena Mongoose 5 dan MongoDB 3.6. Coba kembalikan:
npm install [email protected] --save
), dandb.version()
).Itu berhasil untuk saya! :)
Mongoose 5 seharusnya tidak terpengaruh oleh masalah ini, ia tidak menggunakan $pushAll
mana pun. Jika Anda mendapatkan kesalahan ini dengan luwak 5, buka masalah dengan contoh kode :+1:
PS C:\Users\paula\projetos\apiNode\src> node index.js
{ MongoError: Pengubah tidak dikenal: $pushAll
di Function.MongoError.create (C:\Users\paula\projetos\apiNode\node_modules\mongodb-core\lib\error.js:31:11)
di toError (C:\Users\paula\projetos\apiNode\node_modules\mongodb\lib\utils.js:139:22)
di C:\Users\paula\projetos\apiNode\node_modules\mongodb\lib\collection.js:1059:67
di C:\Users\paula\projetos\apiNode\node_modules\mongodb-core\lib\connection\pool.js:469:18
di _combinedTickCallback (internal/process/next_tick.js:131:7)
di process._tickCallback (internal/process/next_tick.js:180:9)
nama: 'MongoError',
pesan: 'Pengubah tidak dikenal: $pushAll',
pengemudi: benar,
indeks: 0,
kode: 9
Halo semuanya, tolong beri tahu saya cara memperbaiki kesalahan Pengubah tidak dikenal: $ pushAll
обовал от ак е аботает
const luwak = membutuhkan ('luwak')
const ема = luwak.Skema
const UserSchema = Skema baru ({
nomor telegram: {
jenis: Nomor,
diperlukan: benar,
gunakanPushEach: benar
},
film: {
jenis: [Tali],
bawaan: []
}
})
luwak.model ('pengguna', Skema Pengguna)
@rivers-lis Anda harus menambahkan usePushEach
ke opsi skema, bukan ke skema, seperti:
new Schema({ ... }, { usePushEach: true });
ак о от ак
const luwak = membutuhkan('luwak')
const Skema = luwak.Skema
const UserSchema = Skema baru({
nomor telegram: {
jenis: Nomor,
diperlukan: benar
},
films: {
type: [String],
default: []
}
})
Skema baru({}, {usePushEach: true})
luwak.model('pengguna', Skema Pengguna)
new Schema({ ... }, { usePushEach: true });
Ini memecahkan kesalahan untuk saya juga pada versi 4.4.12 dan 5.0.7
ак о от ак
const luwak = membutuhkan('luwak')
const Skema = luwak.Skemaconst UserSchema = Skema baru({
nomor telegram: {
jenis: Nomor,
diperlukan: benar
},films: { type: [String], default: [] }
})
Skema baru({}, {usePushEach: true})
luwak.model('pengguna', Skema Pengguna)
maaf tidak bisa membaca bahasa Rusia
@DanGDroid diterjemahkan secara kasar "Как о от ак" -> "Sesuatu seperti ini"
Komentar yang paling membantu
Nah itu salah satu masalahnya, mongodb 3.5 adalah rilis dev yang tidak stabil dan tidak boleh digunakan. $pushAll telah ditinggalkan untuk waktu yang lama jadi mungkin mereka menyingkirkannya dalam 3.5. @mbroadst dapatkah Anda mengklarifikasi?
Kami menambahkan opsi
usePushEach
untuk mengatasi ini beberapa waktu lalu: https://github.com/Automattic/mongoose/issues/4455 , yang seharusnya menjadi solusi untuk masalah ini: