You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.0 KiB
34 lines
1.0 KiB
3 months ago
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Set a populated virtual value on a document's `$$populatedVirtuals` value
|
||
|
*
|
||
|
* @param {*} populatedVirtuals A document's `$$populatedVirtuals`
|
||
|
* @param {*} name The virtual name
|
||
|
* @param {*} v The result of the populate query
|
||
|
* @param {*} options The populate options. This function handles `justOne` and `count` options.
|
||
|
* @returns {Array<Document>|Document|Object|Array<Object>} the populated virtual value that was set
|
||
|
*/
|
||
|
|
||
|
module.exports = function setPopulatedVirtualValue(populatedVirtuals, name, v, options) {
|
||
|
if (options.justOne || options.count) {
|
||
|
populatedVirtuals[name] = Array.isArray(v) ?
|
||
|
v[0] :
|
||
|
v;
|
||
|
|
||
|
if (typeof populatedVirtuals[name] !== 'object') {
|
||
|
populatedVirtuals[name] = options.count ? v : null;
|
||
|
}
|
||
|
} else {
|
||
|
populatedVirtuals[name] = Array.isArray(v) ?
|
||
|
v :
|
||
|
v == null ? [] : [v];
|
||
|
|
||
|
populatedVirtuals[name] = populatedVirtuals[name].filter(function(doc) {
|
||
|
return doc && typeof doc === 'object';
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return populatedVirtuals[name];
|
||
|
};
|