mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 00:56:13 +01:00
fix: #13007, replace $ with \uFF04, like .
This commit is contained in:
@@ -174,11 +174,12 @@ module.exports = function (module) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const data = {};
|
const data = {};
|
||||||
fields.forEach((field) => {
|
fields = fields.map((field) => {
|
||||||
field = helpers.fieldToString(field);
|
field = helpers.fieldToString(field);
|
||||||
if (field) {
|
if (field) {
|
||||||
data[field] = 1;
|
data[field] = 1;
|
||||||
}
|
}
|
||||||
|
return field;
|
||||||
});
|
});
|
||||||
|
|
||||||
const item = await module.client.collection('objects').findOne({ _key: key }, { projection: data });
|
const item = await module.client.collection('objects').findOne({ _key: key }, { projection: data });
|
||||||
|
|||||||
@@ -23,7 +23,9 @@ 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
|
||||||
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) {
|
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) => {
|
it('should work for field names with "." in them when they are cached', async () => {
|
||||||
db.setObjectField('dotObject3', 'my.dot.field', 'foo2', (err) => {
|
await db.setObjectField('dotObject3', 'my.dot.field', 'foo2');
|
||||||
assert.ifError(err);
|
const data = await db.getObject('dotObject3');
|
||||||
db.getObject('dotObject3', (err, data) => {
|
assert.strictEqual(data['my.dot.field'], 'foo2');
|
||||||
assert.ifError(err);
|
const value = await db.getObjectField('dotObject3', 'my.dot.field');
|
||||||
db.getObjectField('dotObject3', 'my.dot.field', (err, value) => {
|
assert.equal(value, 'foo2');
|
||||||
assert.ifError(err);
|
});
|
||||||
assert.equal(value, 'foo2');
|
|
||||||
done();
|
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