microgen-mongoose
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -73,13 +73,13 @@ const { _ } = require('@feathersjs/commons'); | ||
// Handle $addFields | ||
if (query.$addFields) { | ||
query.$addFields = { | ||
...query.$addFields, | ||
id: "$_id" | ||
} | ||
q.addFields(query.$addFields); | ||
total.addFields(query.$addFields); | ||
delete query.$addFields; | ||
query.$addFields = { | ||
...query.$addFields || {}, | ||
id: "$_id" | ||
} | ||
q.addFields(query.$addFields); | ||
total.addFields(query.$addFields); | ||
delete query.$addFields; | ||
q.match(query); | ||
@@ -174,2 +174,3 @@ total.match(query); | ||
} | ||
console.log("========", query) | ||
@@ -210,3 +211,3 @@ // Handle $addFields | ||
const model = this.discriminators[discriminator] || this.Model; | ||
const { query: { $populate } = {} } = params; | ||
const { query: { $populate, $addFields } = {} } = params; | ||
const isMulti = Array.isArray(_data); | ||
@@ -221,3 +222,3 @@ const data = isMulti ? _data : [_data]; | ||
return results; | ||
}).then(results => { | ||
}).then(async results => { | ||
if (this.lean) { | ||
@@ -227,2 +228,14 @@ results = results.map(item => (item.toObject ? item.toObject() : item)); | ||
if ($addFields) { | ||
let addFields = { | ||
...$addFields, | ||
id: "$_id" | ||
} | ||
const q = model.aggregate([{ $match: { _id: mongoose.Types.ObjectId(results[0]["_id"]) } }]); | ||
q.addFields(addFields); | ||
results = await q.session(params.mongoose && params.mongoose.session).exec() | ||
} | ||
return isMulti ? results : results[0]; | ||
@@ -271,6 +284,17 @@ }).then(select(params, this.id)).catch(errorHandler); | ||
return modelQuery.lean(this.lean).exec() | ||
.then(result => { | ||
.then(async result => { | ||
if (result === null) { | ||
throw new errors.NotFound(`No record found for id '${id}'`); | ||
} | ||
if (query.$addFields) { | ||
query.$addFields = { | ||
...query.$addFields, | ||
id: "$_id" | ||
} | ||
const q = model.aggregate([{ $match: { _id: mongoose.Types.ObjectId(id) } }]); | ||
q.addFields(query.$addFields); | ||
result = await q.exec(); | ||
} | ||
@@ -325,6 +349,6 @@ return result; | ||
return ids.then(idList => { | ||
const { query: { $populate } = {} } = params; | ||
const { query: { $populate, $addFields } = {} } = params; | ||
// Create a new query that re-queries all ids that | ||
// were originally changed | ||
const updatedQuery = { [this.id]: { $in: idList } }; | ||
const updatedQuery = { [this.id]: { $in: idList }, $addFields }; | ||
const findParams = Object.assign({}, params, { | ||
@@ -339,4 +363,6 @@ paginate: false, | ||
const model = this.discriminators[discriminator] || this.Model; | ||
const queryUpdate = { ...query }; | ||
delete queryUpdate.$addFields; | ||
return model | ||
.updateMany(query, data, options) | ||
.updateMany(queryUpdate, data, options) | ||
.lean(this.lean) | ||
@@ -375,2 +401,8 @@ .exec() | ||
const queryDelete = { | ||
...query | ||
} | ||
delete queryDelete.$addFields; | ||
// NOTE (EK): First fetch the record(s) so that we can return | ||
@@ -380,3 +412,3 @@ // it/them when we delete it/them. | ||
if (id !== null) { | ||
return this.Model.deleteOne(query, params.mongoose) | ||
return this.Model.deleteOne(queryDelete, params.mongoose) | ||
.lean(this.lean) | ||
@@ -388,3 +420,3 @@ .exec() | ||
return this.Model.deleteMany(query, params.mongoose) | ||
return this.Model.deleteMany(queryDelete, params.mongoose) | ||
.lean(this.lean) | ||
@@ -391,0 +423,0 @@ .exec() |
{ | ||
"name": "microgen-mongoose", | ||
"description": "A Microgen service adapter for the Mongoose ORM", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"homepage": "https://github.com/feathersjs-ecosystem/feathers-mongoose", | ||
@@ -6,0 +6,0 @@ "main": "lib/", |
101348
691