Cleanup
This commit is contained in:
34
node_modules/mongoose/lib/helpers/query/castUpdate.js
generated
vendored
34
node_modules/mongoose/lib/helpers/query/castUpdate.js
generated
vendored
@@ -6,10 +6,12 @@ const StrictModeError = require('../../error/strict');
|
||||
const ValidationError = require('../../error/validation');
|
||||
const castNumber = require('../../cast/number');
|
||||
const cast = require('../../cast');
|
||||
const getConstructorName = require('../getConstructorName');
|
||||
const getEmbeddedDiscriminatorPath = require('./getEmbeddedDiscriminatorPath');
|
||||
const handleImmutable = require('./handleImmutable');
|
||||
const moveImmutableProperties = require('../update/moveImmutableProperties');
|
||||
const schemaMixedSymbol = require('../../schema/symbols').schemaMixedSymbol;
|
||||
const setDottedPath = require('../path/setDottedPath');
|
||||
const utils = require('../../utils');
|
||||
|
||||
/*!
|
||||
@@ -105,6 +107,14 @@ module.exports = function castUpdate(schema, obj, options, context, filter) {
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(ret).length === 0 &&
|
||||
options.upsert &&
|
||||
Object.keys(filter).length > 0) {
|
||||
// Trick the driver into allowing empty upserts to work around
|
||||
// https://github.com/mongodb/node-mongodb-native/pull/2490
|
||||
return { $setOnInsert: filter };
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
@@ -191,11 +201,19 @@ function walkUpdatePath(schema, obj, op, options, context, filter, pref) {
|
||||
}
|
||||
}
|
||||
|
||||
if (val && val.constructor.name === 'Object') {
|
||||
if (getConstructorName(val) === 'Object') {
|
||||
// watch for embedded doc schemas
|
||||
schematype = schema._getSchema(prefix + key);
|
||||
|
||||
if (handleImmutable(schematype, strict, obj, key, prefix + key, context)) {
|
||||
if (schematype == null) {
|
||||
const _res = getEmbeddedDiscriminatorPath(schema, obj, filter, prefix + key, options);
|
||||
if (_res.schematype != null) {
|
||||
schematype = _res.schematype;
|
||||
}
|
||||
}
|
||||
|
||||
if (op !== '$setOnInsert' &&
|
||||
handleImmutable(schematype, strict, obj, key, prefix + key, context)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -308,7 +326,7 @@ function walkUpdatePath(schema, obj, op, options, context, filter, pref) {
|
||||
// If no schema type, check for embedded discriminators because the
|
||||
// filter or update may imply an embedded discriminator type. See #8378
|
||||
if (schematype == null) {
|
||||
const _res = getEmbeddedDiscriminatorPath(schema, obj, filter, checkPath);
|
||||
const _res = getEmbeddedDiscriminatorPath(schema, obj, filter, checkPath, options);
|
||||
if (_res.schematype != null) {
|
||||
schematype = _res.schematype;
|
||||
pathDetails = _res.type;
|
||||
@@ -344,7 +362,15 @@ function walkUpdatePath(schema, obj, op, options, context, filter, pref) {
|
||||
}
|
||||
|
||||
try {
|
||||
obj[key] = castUpdateVal(schematype, val, op, key, context, prefix + key);
|
||||
if (prefix.length === 0 || key.indexOf('.') === -1) {
|
||||
obj[key] = castUpdateVal(schematype, val, op, key, context, prefix + key);
|
||||
} else {
|
||||
// Setting a nested dotted path that's in the schema. We don't allow paths with '.' in
|
||||
// a schema, so replace the dotted path with a nested object to avoid ending up with
|
||||
// dotted properties in the updated object. See (gh-10200)
|
||||
setDottedPath(obj, key, castUpdateVal(schematype, val, op, key, context, prefix + key));
|
||||
delete obj[key];
|
||||
}
|
||||
} catch (error) {
|
||||
aggregatedError = _handleCastError(error, context, key, aggregatedError);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user