Changeset View
Changeset View
Standalone View
Standalone View
lib/datastore/query_or.js
- This file was added.
const Query = require("./query.js"); | |||||
const QueryStep = require("./query-step.js"); | |||||
module.exports = class extends Query { | |||||
constructor(...queries) { | |||||
super(); | |||||
for (let query of queries) { | |||||
this.addQuery(query); | |||||
} | |||||
} | |||||
addQuery(query) { | |||||
const steps = query.dump(); | |||||
this.steps.push(...steps); | |||||
} | |||||
dump() { | |||||
const lookup_steps = this.steps.filter( | |||||
step => step instanceof QueryStep.Lookup | |||||
); | |||||
return lookup_steps.concat( | |||||
new QueryStep.Match({ $or: this._getMatchExpressions() }) | |||||
); | |||||
} | |||||
toPipeline() { | |||||
const lookups = this.steps | |||||
.filter(step => step instanceof QueryStep.Lookup) | |||||
.reduce((acc, step) => step.pushStage(acc), []); | |||||
return lookups.concat({ $match: { $or: this._getMatchExpressions() } }); | |||||
} | |||||
_getMatchExpressions() { | |||||
return this.steps | |||||
.filter(step => step instanceof QueryStep.Match) | |||||
.reduce((acc, step) => step.pushDump(acc), []); | |||||
} | |||||
}; |