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, matches] = QueryStep.group(this.steps, { | |||||
lookup: (steps, step) => steps.push(step), | |||||
match: (dumps, step) => step.pushDump(dumps), | |||||
}); | |||||
return lookup_steps.concat(QueryStep.makeMatch({ $or: matches })); | |||||
} | |||||
toPipeline() { | |||||
const [lookups, matches] = QueryStep.group(this.steps, { | |||||
lookup: (stages, step) => step.pushStage(stages), | |||||
match: (dumps, step) => step.pushDump(dumps), | |||||
}); | |||||
return lookups.concat({ $match: { $or: matches } }); | |||||
} | |||||
}; |