diff --git a/lib/datastore/request.js b/lib/datastore/request.js index d4556472e1d..44f86dbf70a 100644 --- a/lib/datastore/request.js +++ b/lib/datastore/request.js @@ -260,7 +260,15 @@ DatastoreRequest.prototype.save = function(entities, callback) { data.value = entity.valueToProperty(data.value); if (util.is(data.excludeFromIndexes, 'boolean')) { - data.value.indexed = !data.excludeFromIndexes; + var indexed = !data.excludeFromIndexes; + + if (util.is(data.value.list_value, 'array')) { + data.value.list_value = + data.value.list_value.map(util.propAssign('indexed', indexed)); + } else { + data.value.indexed = indexed; + } + delete data.excludeFromIndexes; } diff --git a/test/datastore/request.js b/test/datastore/request.js index a80e6a92c64..0ca2d091896 100644 --- a/test/datastore/request.js +++ b/test/datastore/request.js @@ -268,6 +268,27 @@ describe('Request', function() { }, assert.ifError); }); + it('should allow setting the indexed value on arrays', function(done) { + request.makeReq_ = function(method, req) { + var property = req.mutation.upsert[0].property[0]; + + property.value.list_value.forEach(function(value) { + assert.strictEqual(value.indexed, false); + }); + + done(); + }; + + request.save({ + key: key, + data: [{ + name: 'name', + value: ['one', 'two', 'three'], + excludeFromIndexes: true + }] + }, assert.ifError); + }); + describe('transactions', function() { beforeEach(function() { // Trigger transaction mode.