123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import * as assert from 'power-assert'
- import tcb from '../../../src/index'
- import * as Config from '../../config.local'
- import * as common from '../../common/index'
- const app = tcb.init(Config)
- const db = app.database()
- const _ = db.command
- const $ = db.command.aggregate
- describe('projection', () => {
- const collName1 = 'test-lookup-pipeline1'
- const collName2 = 'test-lookup-pipeline2'
- let collection1 = null
- let collection2 = null
- const data = [
- { category: 'Web', tags: ['JavaScript', 'C#'] },
- { category: 'Web', tags: ['Go', 'C#'] },
- { category: 'Life', tags: ['Go', 'Python', 'JavaScript'] }
- ]
- beforeAll(async () => {
- collection1 = await common.safeCollection(db, collName1)
- await collection1.remove()
- await collection1.create(data)
- collection2 = await common.safeCollection(db, collName2)
- await collection2.remove()
- await collection2.create(data)
- })
- afterAll(async () => {
- await collection1.remove()
- await collection2.remove()
- })
- it('lookup', async () => {
- const result = await db
- .collection(collName1)
- .aggregate()
- .lookup({
- from: collName2,
- localField: 'category',
- foreignField: 'category',
- as: 'docs'
- })
- .end()
- assert.strictEqual(result.data[0].docs.length, 2)
- })
- it('lookup with pipeline', async () => {
- const result = await db
- .collection(collName1)
- .aggregate()
- .lookup({
- from: collName2,
- pipeline: $.pipeline()
- .match({
- category: 'Web'
- })
- .done(),
- as: 'docs'
- })
- .end()
- assert.strictEqual(result.data[0].docs.length, 2)
- assert.strictEqual(result.data[1].docs.length, 2)
- assert.strictEqual(result.data[2].docs.length, 2)
- })
- })
|