Vous souhaitez demander une fonctionnalité ou signaler un bug ?
Signaler un bug
Quel est le comportement actuel ?
Test de réussite sur la machine locale mais échec sur le serveur jenkins avec exactement les mêmes versions. La seule différence est locale est macos et jenkins est ubuntu pour autant que je sache.
Sur MacOS Sierra, les nœuds 8.4 et 7.11, mongodb 3.4.7 et mongoose 4.11.7, le test suivant réussit, mais sur notre serveur jenkins avec exactement les mêmes versions sur un serveur ubuntu 16.04 échoue.
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);
});
Voici l'erreur exacte que j'obtiens :
{
"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 : voici une version plus lisible de la trace de la pile
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)
pouvez-vous faire mongoose.set('debug', true)
et coller la sortie mongo ?
edit: sortie plus claire
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}
Pour ce que ça vaut, j'ai vérifié la sortie de débogage dans nos environnements de développement et de production locaux et ils utilisent tous les deux le modificateur $ pushAll avec succès. Mongo est installé à partir des packages officiels dans tous les cas. Les machines de développement sont Windows et MacOS, les machines de production sont Amazon Linux.
Pouvez-vous vous connecter à votre instance jenkins mongodb à l'aide du shell mongo et vérifier la version à l'aide de 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
Vous pouvez également imprimer la version du serveur à l'aide de la commande serverStatus()
utilisant mongoose :
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);
});
});
Veuillez d'abord vérifier votre version, les packages officiels ont tendance à devenir obsolètes assez rapidement.
oui, j'ai la même erreur. essayé de passer de 3.2 à 3.5 (pas de migration de données). j'ai un champ tableau
'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}
} ]
},
Je sais, id
n'est pas le meilleur nom de champ, mais bon, cela a fonctionné en 3.2. Dans 3.5, il échoue après avoir essayé de .save()
le document après qu'un élément a été poussé dans le tableau. Je pousse les éléments via .push()
puis marque le champ .markModified('liked.item');
. devrait être simple.
MongoDB 3.5 ?
Oui
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
Eh bien, c'est un problème, mongodb 3.5 est une version de développement instable et ne doit pas être utilisée. $pushAll est obsolète depuis longtemps, alors peut-être qu'ils l'ont supprimé dans la version 3.5. @mbroadst pouvez-vous clarifier?
Nous avons ajouté une option usePushEach
pour contourner ce problème il y a quelque temps : https://github.com/Automattic/mongoose/issues/4455 , cela devrait être une solution de contournement pour ce problème :
new Schema({ arr: [String] }, { usePushEach: true });
@vkarpov15 oui, il a été supprimé pour featureCompatibilityVersion=3.6
Touche. Dans ce cas, nous nous assurerons de sortir le #5670.
J'ai exactement le même problème que j'utilise mongodb v3.6 sur mon Ubuntu. si le pushAll est supprimé de la base de données, comment dois-je enregistrer l'instance .. veuillez me fournir une alternative
@rankitbishnoi Vous pouvez contourner cela temporairement en ajoutant l'option usePushEach
sur chaque définition de schéma dans les options.
@ vkarpov15 Merci pour la fantastique bibliothèque monsieur.
Moi aussi, je rencontre ce problème avec Mongoose 4.13.7 et MongoDB 3.6.0.
MISE À JOUR : L'ajout de usePushEach: true
aux options de schéma pour les modèles a résolu ce problème.
@dyladan @chaddjohnson fonctionne vraiment.
Merci beaucoup!
s'il vous plaît, comment puis-je faire cela? comment puis-je ajouter cela aux options de schéma? Merci!
@raphaelbp12 Voici la documentation sur l'utilisation des options de schéma : http://mongoosejs.com/docs/guide.html
La mise à jour du schéma ne modifie pas ce comportement. Cela ne fonctionne pas pour les données plus anciennes dans la base de données déjà pour 3.6.
Edit : le retour à la version 3.4 a résolu le problème.
J'avais un problème similaire en exécutant le code sur ma machine. Je pense que c'est à cause de Mongoose 5 et MongoDB 3.6. Essayez de revenir en arrière :
npm install [email protected] --save
), etdb.version()
).ça a marché pour moi ! :)
Mongoose 5 ne devrait pas être affecté par ce problème, il n'utilise $pushAll
nulle part. Si vous obtenez cette erreur avec mongoose 5, veuillez ouvrir un problème avec des exemples de code :+1 :
PS C:\Users\paula\projetos\apiNode\src> node index.js
{ MongoError : Modificateur inconnu : $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 (interne/processus/next_tick.js:131:7)
à process._tickCallback (interne/process/next_tick.js:180:9)
nom : 'MongoError',
message : « Modificateur inconnu : $pushAll »,
pilote : vrai,
indice : 0,
code : 9
Bonjour à tous, dites-moi comment corriger l'erreur Modificateur inconnu : $ pushAll
робовал вот так не работает
const mangouste = require ('mangouste')
const Схема = mangouste.Schéma
const UserSchema = nouveau schéma ({
Id de télégramme : {
tapez : nombre,
requis : vrai,
usePushEach : vrai
},
films : {
tapez : [Chaîne],
défaut: []
}
})
mongoose.model ('users', UserSchema)
@rivers-lis Vous devez ajouter usePushEach
aux options du schéma, pas au schéma, comme ceci :
new Schema({ ... }, { usePushEach: true });
ак то вот так
const mangouste = require('mangouste')
const Schéma = mangouste.Schéma
const UserSchema = new Schema({
Id de télégramme : {
tapez : nombre,
requis : vrai
},
films: {
type: [String],
default: []
}
})
nouveau schéma ({}, {usePushEach : true})
mongoose.model('users', UserSchema)
new Schema({ ... }, { usePushEach: true });
Cela résout l'erreur pour moi aussi sur les versions 4.4.12 et 5.0.7
ак то вот так
const mangouste = require('mangouste')
const Schéma = mangouste.Schémaconst UserSchema = new Schema({
Id de télégramme : {
tapez : nombre,
requis : vrai
},films: { type: [String], default: [] }
})
nouveau schéma ({}, {usePushEach : true})
mongoose.model('users', UserSchema)
désolé ne peut pas lire le russe
@DanGDroid traduit grossièrement "Как то вот так" -> "Quelque chose comme ça"
Commentaire le plus utile
Eh bien, c'est un problème, mongodb 3.5 est une version de développement instable et ne doit pas être utilisée. $pushAll est obsolète depuis longtemps, alors peut-être qu'ils l'ont supprimé dans la version 3.5. @mbroadst pouvez-vous clarifier?
Nous avons ajouté une option
usePushEach
pour contourner ce problème il y a quelque temps : https://github.com/Automattic/mongoose/issues/4455 , cela devrait être une solution de contournement pour ce problème :