setPopulatedVirtualValue.js 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. 'use strict';
  2. /**
  3. * Set a populated virtual value on a document's `$$populatedVirtuals` value
  4. *
  5. * @param {*} populatedVirtuals A document's `$$populatedVirtuals`
  6. * @param {*} name The virtual name
  7. * @param {*} v The result of the populate query
  8. * @param {*} options The populate options. This function handles `justOne` and `count` options.
  9. * @returns {Array<Document>|Document|Object|Array<Object>} the populated virtual value that was set
  10. */
  11. module.exports = function setPopulatedVirtualValue(populatedVirtuals, name, v, options) {
  12. if (options.justOne || options.count) {
  13. populatedVirtuals[name] = Array.isArray(v) ?
  14. v[0] :
  15. v;
  16. if (typeof populatedVirtuals[name] !== 'object') {
  17. populatedVirtuals[name] = options.count ? v : null;
  18. }
  19. } else {
  20. populatedVirtuals[name] = Array.isArray(v) ?
  21. v :
  22. v == null ? [] : [v];
  23. populatedVirtuals[name] = populatedVirtuals[name].filter(function(doc) {
  24. return doc && typeof doc === 'object';
  25. });
  26. }
  27. return populatedVirtuals[name];
  28. };