Skip to content

Commit 28bff8d

Browse files
committed
feat: Support dot notation on Array fields
1 parent 2420024 commit 28bff8d

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

spec/ParseObject.spec.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,21 @@ describe('Parse.Object testing', () => {
568568
);
569569
});
570570

571+
it('can increment array nested fields', async () => {
572+
const obj = new TestObject();
573+
obj.set('items', [ { value: 'a', count: 5 }, { value: 'b', count: 1 } ]);
574+
await obj.save();
575+
576+
obj.increment('items.0.count', 15);
577+
obj.increment('items.1.count', 4);
578+
await obj.save();
579+
580+
const query = new Parse.Query(TestObject);
581+
const result = await query.get(obj.id);
582+
expect(result.get('items')[0].count).toBe(20);
583+
expect(result.get('items')[1].count).toBe(5);
584+
});
585+
571586
it('addUnique with object', function (done) {
572587
const x1 = new Parse.Object('X');
573588
x1.set('stuff', [1, { hello: 'world' }, { foo: 'bar' }]);

src/Controllers/SchemaController.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,9 +1096,15 @@ export default class SchemaController {
10961096
maintenance?: boolean
10971097
) {
10981098
if (fieldName.indexOf('.') > 0) {
1099-
// subdocument key (x.y) => ok if x is of type 'object'
1100-
fieldName = fieldName.split('.')[0];
1101-
type = 'Object';
1099+
// "<array>.<index>" for Nested Array
1100+
// "<embedded document>.<field>" for Nested Object
1101+
const [x, y] = fieldName.split('.');
1102+
fieldName = x;
1103+
if (!isNaN(y)) {
1104+
type = 'Array';
1105+
} else {
1106+
type = 'Object';
1107+
}
11021108
}
11031109
let fieldNameToValidate = `${fieldName}`;
11041110
if (maintenance && fieldNameToValidate.charAt(0) === '_') {

0 commit comments

Comments
 (0)