Skip to content

Commit 867e161

Browse files
committed
Support Distinct for special fields
1 parent 961abda commit 867e161

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

spec/ParseQuery.Aggregate.spec.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,31 @@ 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 query = new Parse.Query(TestObject);
1120+
const results = await query.distinct('updatedAt');
1121+
1122+
// loadTestData() all have the same updatedAt
1123+
expect(results.length).toBe(1);
1124+
});
1125+
11011126
it('distinct null field', done => {
11021127
const options = Object.assign({}, masterKeyOptions, {
11031128
body: { distinct: 'distinctField' },

src/Adapters/Storage/Mongo/MongoStorageAdapter.js

Lines changed: 7 additions & 6 deletions
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)