mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 08:36:12 +01:00
fix: #7139
This commit is contained in:
@@ -16,10 +16,9 @@ module.exports = function (db, module) {
|
|||||||
if (!key || !data) {
|
if (!key || !data) {
|
||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
if (data.hasOwnProperty('')) {
|
|
||||||
delete data[''];
|
const writeData = helpers.serializeData(data);
|
||||||
}
|
db.collection('objects').updateOne({ _key: key }, { $set: writeData }, { upsert: true, w: 1 }, function (err) {
|
||||||
db.collection('objects').updateOne({ _key: key }, { $set: data }, { upsert: true, w: 1 }, function (err) {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@@ -34,7 +33,6 @@ module.exports = function (db, module) {
|
|||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
var data = {};
|
var data = {};
|
||||||
field = helpers.fieldToString(field);
|
|
||||||
data[field] = value;
|
data[field] = value;
|
||||||
module.setObject(key, data, callback);
|
module.setObject(key, data, callback);
|
||||||
};
|
};
|
||||||
@@ -76,7 +74,7 @@ module.exports = function (db, module) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
data = data.map(helpers.deserializeData);
|
||||||
var map = helpers.toMap(data);
|
var map = helpers.toMap(data);
|
||||||
unCachedKeys.forEach(function (key) {
|
unCachedKeys.forEach(function (key) {
|
||||||
cachedData[key] = map[key] || null;
|
cachedData[key] = map[key] || null;
|
||||||
|
|||||||
@@ -22,8 +22,27 @@ helpers.fieldToString = function (field) {
|
|||||||
field = field.toString();
|
field = field.toString();
|
||||||
}
|
}
|
||||||
// if there is a '.' in the field name it inserts subdocument in mongo, replace '.'s with \uff0E
|
// if there is a '.' in the field name it inserts subdocument in mongo, replace '.'s with \uff0E
|
||||||
field = field.replace(/\./g, '\uff0E');
|
return field.replace(/\./g, '\uff0E');
|
||||||
return field;
|
};
|
||||||
|
|
||||||
|
helpers.serializeData = function (data) {
|
||||||
|
const serialized = {};
|
||||||
|
for (const field in data) {
|
||||||
|
if (data.hasOwnProperty(field) && field !== '') {
|
||||||
|
serialized[helpers.fieldToString(field)] = data[field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return serialized;
|
||||||
|
};
|
||||||
|
|
||||||
|
helpers.deserializeData = function (data) {
|
||||||
|
const deserialized = {};
|
||||||
|
for (const field in data) {
|
||||||
|
if (data.hasOwnProperty(field)) {
|
||||||
|
deserialized[field.replace(/\uff0E/g, '.')] = data[field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return deserialized;
|
||||||
};
|
};
|
||||||
|
|
||||||
helpers.valueToString = function (value) {
|
helpers.valueToString = function (value) {
|
||||||
|
|||||||
@@ -52,6 +52,17 @@ describe('Hash methods', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should work for field names with "." in them', function (done) {
|
||||||
|
db.setObject('dotObject', { 'my.dot.field': 'foo' }, function (err) {
|
||||||
|
assert.ifError(err);
|
||||||
|
db.getObject('dotObject', function (err, data) {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert.equal(data['my.dot.field'], 'foo');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('setObjectField()', function () {
|
describe('setObjectField()', function () {
|
||||||
@@ -70,6 +81,17 @@ describe('Hash methods', function () {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should work for field names with "." in them', function (done) {
|
||||||
|
db.setObjectField('dotObject2', 'my.dot.field', 'foo2', function (err) {
|
||||||
|
assert.ifError(err);
|
||||||
|
db.getObjectField('dotObject2', 'my.dot.field', function (err, value) {
|
||||||
|
assert.ifError(err);
|
||||||
|
assert.equal(value, 'foo2');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getObject()', function () {
|
describe('getObject()', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user