mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: #13007, replace $ with \uFF04, like .
This commit is contained in:
@@ -174,11 +174,12 @@ module.exports = function (module) {
|
||||
}
|
||||
|
||||
const data = {};
|
||||
fields.forEach((field) => {
|
||||
fields = fields.map((field) => {
|
||||
field = helpers.fieldToString(field);
|
||||
if (field) {
|
||||
data[field] = 1;
|
||||
}
|
||||
return field;
|
||||
});
|
||||
|
||||
const item = await module.client.collection('objects').findOne({ _key: key }, { projection: data });
|
||||
|
||||
@@ -23,7 +23,9 @@ helpers.fieldToString = function (field) {
|
||||
field = field.toString();
|
||||
}
|
||||
// if there is a '.' in the field name it inserts subdocument in mongo, replace '.'s with \uff0E
|
||||
return field.replace(/\./g, '\uff0E');
|
||||
// replace $ with \uff04 so we can use $ in document fields
|
||||
return field.replace(/\./g, '\uff0E')
|
||||
.replace(/\$/g, '\uFF04');
|
||||
};
|
||||
|
||||
helpers.serializeData = function (data) {
|
||||
|
||||
@@ -155,18 +155,21 @@ describe('Hash methods', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should work for field names with "." in them when they are cached', (done) => {
|
||||
db.setObjectField('dotObject3', 'my.dot.field', 'foo2', (err) => {
|
||||
assert.ifError(err);
|
||||
db.getObject('dotObject3', (err, data) => {
|
||||
assert.ifError(err);
|
||||
db.getObjectField('dotObject3', 'my.dot.field', (err, value) => {
|
||||
assert.ifError(err);
|
||||
assert.equal(value, 'foo2');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
it('should work for field names with "." in them when they are cached', async () => {
|
||||
await db.setObjectField('dotObject3', 'my.dot.field', 'foo2');
|
||||
const data = await db.getObject('dotObject3');
|
||||
assert.strictEqual(data['my.dot.field'], 'foo2');
|
||||
const value = await db.getObjectField('dotObject3', 'my.dot.field');
|
||||
assert.equal(value, 'foo2');
|
||||
});
|
||||
|
||||
it('should work for fields that start with $', async () => {
|
||||
await db.setObjectField('dollarsign', '$someField', 'foo');
|
||||
assert.strictEqual(await db.getObjectField('dollarsign', '$someField'), 'foo');
|
||||
assert.strictEqual(await db.isObjectField('dollarsign', '$someField'), true);
|
||||
assert.strictEqual(await db.isObjectField('dollarsign', '$doesntexist'), false);
|
||||
await db.deleteObjectField('dollarsign', '$someField');
|
||||
assert.strictEqual(await db.isObjectField('dollarsign', '$someField'), false);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user