Fix: aggregate not matching null values (#6043)
* Fix: aggregate not matching null values * Exclude Postgres from this new test - it does not even support and is not working correctly - should be addressed separately
This commit is contained in:
committed by
Diamond Lewis
parent
a754b883b2
commit
84776810b8
@@ -941,6 +941,52 @@ describe('Parse.Query Aggregate testing', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it_exclude_dbs(['postgres'])('match null values', async () => {
|
||||||
|
const obj1 = new Parse.Object('MyCollection');
|
||||||
|
obj1.set('language', 'en');
|
||||||
|
obj1.set('otherField', 1);
|
||||||
|
const obj2 = new Parse.Object('MyCollection');
|
||||||
|
obj2.set('language', 'en');
|
||||||
|
obj2.set('otherField', 2);
|
||||||
|
const obj3 = new Parse.Object('MyCollection');
|
||||||
|
obj3.set('language', null);
|
||||||
|
obj3.set('otherField', 3);
|
||||||
|
const obj4 = new Parse.Object('MyCollection');
|
||||||
|
obj4.set('language', null);
|
||||||
|
obj4.set('otherField', 4);
|
||||||
|
const obj5 = new Parse.Object('MyCollection');
|
||||||
|
obj5.set('language', 'pt');
|
||||||
|
obj5.set('otherField', 5);
|
||||||
|
const obj6 = new Parse.Object('MyCollection');
|
||||||
|
obj6.set('language', 'pt');
|
||||||
|
obj6.set('otherField', 6);
|
||||||
|
await Parse.Object.saveAll([obj1, obj2, obj3, obj4, obj5, obj6]);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
(await new Parse.Query('MyCollection').aggregate([
|
||||||
|
{
|
||||||
|
match: {
|
||||||
|
language: { $in: [null, 'en'] },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]))
|
||||||
|
.map(value => value.otherField)
|
||||||
|
.sort()
|
||||||
|
).toEqual([1, 2, 3, 4]);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
(await new Parse.Query('MyCollection').aggregate([
|
||||||
|
{
|
||||||
|
match: {
|
||||||
|
$or: [{ language: 'en' }, { language: null }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]))
|
||||||
|
.map(value => value.otherField)
|
||||||
|
.sort()
|
||||||
|
).toEqual([1, 2, 3, 4]);
|
||||||
|
});
|
||||||
|
|
||||||
it('project query', done => {
|
it('project query', done => {
|
||||||
const options = Object.assign({}, masterKeyOptions, {
|
const options = Object.assign({}, masterKeyOptions, {
|
||||||
body: {
|
body: {
|
||||||
|
|||||||
@@ -841,7 +841,9 @@ export class MongoStorageAdapter implements StorageAdapter {
|
|||||||
// As much as I hate recursion...this seemed like a good fit for it. We're essentially traversing
|
// As much as I hate recursion...this seemed like a good fit for it. We're essentially traversing
|
||||||
// down a tree to find a "leaf node" and checking to see if it needs to be converted.
|
// down a tree to find a "leaf node" and checking to see if it needs to be converted.
|
||||||
_parseAggregateArgs(schema: any, pipeline: any): any {
|
_parseAggregateArgs(schema: any, pipeline: any): any {
|
||||||
if (Array.isArray(pipeline)) {
|
if (pipeline === null) {
|
||||||
|
return null;
|
||||||
|
} else if (Array.isArray(pipeline)) {
|
||||||
return pipeline.map(value => this._parseAggregateArgs(schema, value));
|
return pipeline.map(value => this._parseAggregateArgs(schema, value));
|
||||||
} else if (typeof pipeline === 'object') {
|
} else if (typeof pipeline === 'object') {
|
||||||
const returnValue = {};
|
const returnValue = {};
|
||||||
|
|||||||
Reference in New Issue
Block a user