J'ai un problème lorsque l'enregistrement d'un modèle échoue avec erreur mongo: MongoError: inconnu modificateur: $ pushAll .
J'ai un champ de tableau subDomains
dans mon schéma et qui sera enregistré par défaut avec le sous-domaine comme suit.
// already Domain instance get availble
Domain.subDomains.Push({'name': 'default' , 'role': 'xyz', ...});
// save domain with default fileds
Domain.save()
Informations système comme suit:
➜ ~ node --version
v9.4.0
➜ ~ npm --version
5.6.0
➜ ~
➜ ~ mongo --version
MongoDB Shell version v3.6.2
git version: ......
OpenSSL version: OpenSSL 1.0.2n 7 Dec 2017
allocator: system
modules: none
build environment:
distarch: x86_64
target_Arch: x86_64
➜ ~
S'il vous plaît, aidez-moi à régler celui-ci.
L'opérateur $pushAll
n'est plus pris en charge dans Mongo 3.6.2 (ni dans les versions plus récentes à partir de 3.6.x +).
Vous pouvez faire ce qui suit:
usePushEach: true
la définition de schéma .Ajouter aux réponses ci-dessus avec le code suivant pour vous aider à comprendre la méthode concat. Vous n'avez pas besoin de rétrograder MongoDB en particulier.
Avant de résoudre ce problème, vous devez garder à l’esprit que la méthode $ pushAll est obsolète depuis longtemps. Ils peuvent donc s’en débarrasser dans les versions 3.5 et supérieures.
Mais vous pouvez résoudre ce problème avec l'autre méthode alternative - concat.
Mon ancien code,
myArray.Push(id); //breaks on DocumentDB with Mongo API because of $pushAll
a été remplacé par
myArray = myArray.concat([id]); //this uses $set so no problems
Même la propre implémentation de MongoDB d’Azure ne prend pas en charge $ pushAll.
Je vous remercie.
Au cas où quelqu'un de nouveau tomberait dessus, à partir de mongoose 5xx , le support de l'option usePushEach: true
dans la définition du schéma a été supprimé
Vous devez plutôt utiliser concat()
là où vous utiliseriez normalement Push lors de l'ajout d'objets . Dans les cas où concat()
ne fonctionne pas (exemple où $inc
est appelé explicitement ou implicitement), utilisez unshift()
.
J'utilise "mangouste": "^ 4.12.1" et l'utilisation de .Push provoquait la même erreur. L’utilisation de usePushEach
fonctionne pour moi. Nous pouvons l'activer pour tous les schémas suivants:
const mongoose = require('mongoose');
mongoose.plugin(schema => { schema.options.usePushEach = true });
const Schema = mongoose.Schema;
const SampleSchema = new Schema({
attr1: type,
attr2: type,
attr2: type,
attr4: [{
type: Schema.Types.ObjectId,
ref: 'ref_table_name'
}] });
Si vous utilisez> 3.6 Cela ne fonctionne pas . Vous pouvez utiliser $Push
avec $each
, cela fonctionnera.
Remplacer .Push
par .unshift
est le meilleur moyen de remédier à cette erreur . J'espère que cela vous sauvera la journée.
essayer
Domain._doc.subDomains.Push({'name': 'default' , 'role': 'xyz', ...});
ça marche pour moi