[MONGODB] 몽구스 집계 쿼리 / Mockgoose 시험은 다른 곳에서 작동 농담 실패
MONGODB몽구스 집계 쿼리 / Mockgoose 시험은 다른 곳에서 작동 농담 실패
내 몽구스 모델에 대한 몇 가지 테스트를 만들려고 해요, 그리고 내가 농담 / Mockgoose 테스트는 속기 쿼리 / 통합 파이프 라인 통과 얻을 내가 검색하기 위해 만든 (첫 번째 코드 블록 아래 참조)하는 방법을 알아낼 수 없습니다 다른 모음에서 참조되지 않은 하나 개의 컬렉션에서 임의의 문서.
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()
}
이 테스트입니다
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()
})
})
샌드 노드 JS 코드 :
Activity.find().getUnused()
.then((x) => {
console.log(x);
})
나는 샌드 박스 노드 파일을하려고하면, 재치가 정상적으로 작동하고 같은 전형적인의 검색어를 검색 :
[ { _id: 58f3dee3b0346910a69e6e5d, activity: 'running', __v: 0 } ]
내가 테스트를 실행하면,이 MongoError를 얻을 :
The 'cursor' option is required, except for aggregation explain
어떻게 보편적 인 방식으로 모두 상황에서 그하는 일을이 문제를 해결합니까? 가능하면 방법은 약속을 반환 할 내가 좋아하는 것입니다. 나는 체인 집계 방법 (위 참조) 및 파이프 라인에 대한 더 네이티브 몽고 집계 배열,하지만 모두 반환 오류를 모두 시도했습니다. 그와 관련이있는 경우 내 몽고 버전은 3.4.2이다.
해결법
-
==============================
1.나는 문제의 유사한 종류를 직면하고 많은 연구 후에 나는 이전 버전의 위 MongoDB를 3.6에서 변화를 깨는과 호환되지 않습니다으로 몽구스의 이전 버전에 의한 것을 것을 발견했다.
나는 문제의 유사한 종류를 직면하고 많은 연구 후에 나는 이전 버전의 위 MongoDB를 3.6에서 변화를 깨는과 호환되지 않습니다으로 몽구스의 이전 버전에 의한 것을 것을 발견했다.
나는 하나 몽구스 버전을 업그레이드 나는 위의 몽구스 버전 4.12.2 또는 (mongoose@4.12.2)와 완벽하게 잘 작동 것을 발견했다.
당신은 다음 명령을 실행하여 몽구스 버전을 업그레이드 할 수 있습니다 :
npm install mongoose@4.12.2
-
==============================
2.마지막으로이 아웃 생각 : 나는 집계 파이프 라인에 커서 호출을 추가하고, 스트림로 번역했다. 약속 I을 유지하기 위해 쿼리 방법을했다 아래로, 데이터 결의가 스트림이 종료되면 있다는 약속을 반환 :
마지막으로이 아웃 생각 : 나는 집계 파이프 라인에 커서 호출을 추가하고, 스트림로 번역했다. 약속 I을 유지하기 위해 쿼리 방법을했다 아래로, 데이터 결의가 스트림이 종료되면 있다는 약속을 반환 :
activitySchema.query.getUnused = function() { return new Promise((res, rej) => { let data = [] 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 }) .cursor({}) .exec() .on('data', doc => data.push(doc)) .on('end', () => res(data)) }) }
from https://stackoverflow.com/questions/43442588/mongoose-aggregation-query-fails-in-jest-mockgoose-test-works-elsewhere by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 여러 언어를 사용하여 MongoDB를 텍스트 검색 (0) | 2019.12.27 |
---|---|
[MONGODB] 해당 조건과 일치하는 배열 요소 개수 (0) | 2019.12.27 |
[MONGODB] NG는-경우가해야보다 더 많은 시간을 호출되는 (0) | 2019.12.27 |
[MONGODB] JSON에 BSON 유형 ObjectId가 변환 (MongoDB의에서 보관) -Java (0) | 2019.12.27 |
[MONGODB] 어떻게 MongoDB를 함께 배열의 순서를 변경하려면? (0) | 2019.12.26 |