Py学习  »  MongoDB

JavaScript:为MongoDB开发搜索查询

Daniel • 4 年前 • 737 次点击  

我需要一些帮助来开发一个搜索查询,以便在我的电子应用程序中提供一个按钮一些功能。

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet
  Artist.sort()
    .find()
    .offset()
    .limit();
};

我跳过了 criteria 现在请不要理会。用户应该能够按艺术家姓名、年龄和发行的专辑进行排序。这个 sortProperty 1 .

排序背后的真正挑战是我需要指定不同的 sortProperties 但在任何时候都只有一个。

我想通过一个不同的 排序属性 排序属性 是。

所以如果 排序属性 等于年龄,我需要确保我有一个声明说年龄。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53623
 
737 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Daniel
Reply   •   1 楼
Daniel    5 年前

所以以上的答案是最好的解决方案,因为它是ES6和更优雅。我想和大家分享我在得到这个答案后学到的ES5老校风,并对它进行更深入的研究。

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet
  const sortOrder = {};

  Artist.find({})
    .sort()
    .skip(offset)
    .limit(limit);
};

我把它变成了一个空的物体,然后看着它并添加 sortProperty 等于 1 就像这样:

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet
  const sortOrder = {};
  sortOrder[sortProperty] = 1;

  Artist.find({})
    .sort()
    .skip(offset)
    .limit(limit);
};

sortOrder 就像这样:

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet
  const sortOrder = {};
  sortOrder[sortProperty] = 1;

  Artist.find({})
    .sort(sortOrder)
    .skip(offset)
    .limit(limit);
};

好吧,这就是ES5方法,如果有人对它感兴趣的话,但是正如你在上面看到的,ES6解决方案看起来更好。

创建一个对象并同时向其添加一个属性的整个问题是,它在ES5中不受支持,我们必须首先声明一个对象,然后向其添加一个属性并将该属性设置为1。

方括号表示 变量:

sortOrder[sortProperty] = 1;

这是一个字符串,我试图添加 财产 name 设置为 因此,如果在Chrome控制台或代码片段中运行此命令,最终结果是 { name: 1 } .

.sort({ [sortProperty]: 1 })

这里发生的是在运行时查看 排序属性 变量及其等于的值,将该属性添加到此对象,并将其值设置为 1个 .

所以说得很清楚,是的,最初给出的答案是我采用的优雅的解决方案:

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  // write a query that will follow sort, offset, limit options only
  // do not worry about criteria yet
  Artist.find()
    .sort({ [sortProperty]: 1 })
    .skip(offset)
    .limit(limit);
};

我只是分享我在学习和实施过程中学到的东西。

molamk
Reply   •   2 楼
molamk    5 年前

似乎已经有了执行查询所需的所有部分。你只需要创建 sort 基于您的 sortProperty 排序属性 例如 age

module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
  return Artist
    .find()
    .sort({ [sortProperty]: 1 })
    .skip(offset)
    .limit(limit);
};

注意

为了演示动态密钥分配,这里有一个片段

const sortProperty = 'age';
const selector = { [sortProperty]: 1 };

console.log(selector);