Skip to content

Commit daab378

Browse files
authored
Support Distinct for special fields (#5144)
* Support Distinct for special fields * update changelog
1 parent 961abda commit daab378

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
#### Improvements:
77
* Fixes issue that would prevent users with large number of roles to resolve all of them [@Moumouls]() (#5131, #5132)
8-
8+
* Fixes distinct query on special fields ([#5144](https://github.com/parse-community/parse-server/pull/5144))
99

1010
### 3.1.0
1111
[Full Changelog](https://github.com/parse-community/parse-server/compare/3.0.0...3.1.0)

spec/ParseQuery.Aggregate.spec.js

+30
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,36 @@ describe('Parse.Query Aggregate testing', () => {
10981098
.catch(done.fail);
10991099
});
11001100

1101+
it('distinct objectId', async () => {
1102+
const query = new Parse.Query(TestObject);
1103+
const results = await query.distinct('objectId');
1104+
expect(results.length).toBe(4);
1105+
});
1106+
1107+
it('distinct createdAt', async () => {
1108+
const object1 = new TestObject({ createdAt_test: true });
1109+
await object1.save();
1110+
const object2 = new TestObject({ createdAt_test: true });
1111+
await object2.save();
1112+
const query = new Parse.Query(TestObject);
1113+
query.equalTo('createdAt_test', true);
1114+
const results = await query.distinct('createdAt');
1115+
expect(results.length).toBe(2);
1116+
});
1117+
1118+
it('distinct updatedAt', async () => {
1119+
const object1 = new TestObject({ updatedAt_test: true });
1120+
await object1.save();
1121+
const object2 = new TestObject();
1122+
await object2.save();
1123+
object2.set('updatedAt_test', true);
1124+
await object2.save();
1125+
const query = new Parse.Query(TestObject);
1126+
query.equalTo('updatedAt_test', true);
1127+
const results = await query.distinct('updatedAt');
1128+
expect(results.length).toBe(2);
1129+
});
1130+
11011131
it('distinct null field', done => {
11021132
const options = Object.assign({}, masterKeyOptions, {
11031133
body: { distinct: 'distinctField' },

src/Adapters/Storage/Mongo/MongoStorageAdapter.js

+7-6
Original file line numberDiff line numberDiff line change
@@ -710,19 +710,20 @@ export class MongoStorageAdapter implements StorageAdapter {
710710
schema = convertParseSchemaToMongoSchema(schema);
711711
const isPointerField =
712712
schema.fields[fieldName] && schema.fields[fieldName].type === 'Pointer';
713-
if (isPointerField) {
714-
fieldName = `_p_${fieldName}`;
715-
}
713+
const transformField = transformKey(className, fieldName, schema);
714+
716715
return this._adaptiveCollection(className)
717716
.then(collection =>
718-
collection.distinct(fieldName, transformWhere(className, query, schema))
717+
collection.distinct(
718+
transformField,
719+
transformWhere(className, query, schema)
720+
)
719721
)
720722
.then(objects => {
721723
objects = objects.filter(obj => obj != null);
722724
return objects.map(object => {
723725
if (isPointerField) {
724-
const field = fieldName.substring(3);
725-
return transformPointerString(schema, field, object);
726+
return transformPointerString(schema, fieldName, object);
726727
}
727728
return mongoObjectToParseObject(className, object, schema);
728729
});

0 commit comments

Comments
 (0)