Mungo-aggregation-Abfrage nicht im Scherz/Mockgoose test, anderswo auch funktioniert
Ich versuche zu schaffen, einige tests für meine Mongoose-Modelle, und ich kann nicht herausfinden, wie man den Scherz/Mockgoose test zu bestehen für eine Kurzschrift-Abfrage - /aggregation-pipeline (siehe unten im ersten code-block), die ich erstellt, um rufen Sie einen beliebigen Dokument aus einer Sammlung, die nicht auf die in einer anderen Sammlung.
activitySchema.query.getUnused = function() {
return Activity.aggregate()
.lookup({
from: 'userActivity',
localField: '_id',
foreignField: 'activity',
as: 'matched_docs',
})
.match({ matched_docs: { $eq: [] } })
.sample(1)
.project({ matched_docs: 0, __v: 0 })
.exec()
}
Jest test
describe('Activity methods', () => {
test('Activity unused query executes', (done) => {
function createActivity() {
return Activity
.create({ activity: 'running' })
.then(activity => {
console.log('Activity is generated')
return Promise.resolve(true)
})
}
async function retrieveActivity() {
await createActivity()
Activity
.find()
.getUnused()
.then(unused => {
console.log(unused);
expect(unused).toHaveLength(1)
done()
})
.catch(x => {
console.log(x)
})
}
return retrieveActivity()
})
})
Sandbox Node JS code:
Activity.find().getUnused()
.then((x) => {
console.log(x);
})
Wenn ich versuche, es in einer sandbox-Knoten Datei, Witz, funktioniert normal, und ruft einen typischen queryset wie:
[ { _id: 58f3dee3b0346910a69e6e5d, activity: 'running', __v: 0 } ]
Wenn ich den test, bekomme ich diese MongoError:
The 'cursor' option is required, except for aggregation explain
Wie behebe ich dieses Problem mit einem universellen Art und Weise, die funktioniert in beiden Kontexten? Ich würde gerne zu der Methode zurückzukehren ein Versprechen, wenn möglich. Ich habe versucht, sowohl die verketteten aggregate-Methode (siehe oben) und die native Mongo Aggregat array für die Rohrleitungen, aber beide Fehler zurück. Meine mongo-version ist 3.4.2 falls das relevant ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe vor einer ähnlichen Art von problem und nach recherche eine Menge, die ich fand, dass es aufgrund der älteren version von mongoose, wie frühere Versionen sind nicht kompatibel mit den aktuellen änderungen in MongoDB 3.6 und höher.
Habe ich ein Upgrade mongoose version eins nach dem anderen und ich fand, dass es funktioniert völlig in Ordnung, mit mongoose-version
4.12.2
oder oben([email protected]).
Können Sie aktualisieren Sie Ihre mongoose-version durch ausführen folgenden Befehl ein:
Schließlich dachte dies: ich hatte, um einen cursor Aufruf der aggregation pipeline, und übersetzen es in einen Bach. Zu halten das Versprechen, das ich hatte die query-Methode
zurück ein Versprechen, das löst sich mit der Daten, sobald der stream beendet, als unten: