猫鼬,如何基于文档中字段的总和来限制查询

时间:2020-10-31 04:39:12

标签: node.js mongodb sorting mongoose limit

我有一个形状为

的文档
import Layout from 'antd/es/layout';
import AppHeader from 'layout/Header';
import React from 'react';
import Footer from './sub/Footer';
import List from './sub/List';
import Content from 'layout/Content';
import { itemsSelector } from './redux/selectors';

export const Page = () => {
  const items = useSelector(itemsSelector);

  return (
    <Layout className="site-layout">
      <AppHeader />
      <Content>
        <List items={items} />
        <Footer />
      </Content>
    </Layout>
  );
};

export default Page;

并在将文档编入索引后

const Model = mongoose.Schema({
  something1: {type:String},
  someNumber1:{type:Number},
  something2: {type:String},
  someNumber2:{type:Number},
  aFloatNumber: {type:Number}
)}

为了获得更好的性能,我希望我做对了,如果做错了,请纠正我。

我正在尝试查询usign语法:

Model.index({something1:1 , something2:1 , aFloatNumber:1})

现在,我想限制返回的查询,因为它可能是一个很大的列表,以提高性能,但是,此限制会根据输入而更改。基本上,我希望猫鼬继续将someNumber1加在一起,并在它大于输入数字后停止返回。类似于下面的代码:

const model = await Model.find({
  $and:[{something1:anInput}, {something2:anotherInput}]})
  .sort(aFloatNumber)

所以基本上我的问题是:

  1. 我是否可以根据查询为文档正确建立索引?
  2. 限制查询的性能,因为它正在对数据进行排序,因此我认为它将检查所有文档以对其进行排序吗?
  3. 如果它对性能有很大的影响,那么正确的语法是什么,因为我将在应用程序中进行很多查询?

1 个答案:

答案 0 :(得分:0)

您要查询mongodb的 skip 功能,类似于sql中的 offset https://docs.mongodb.com/manual/reference/operator/aggregation/skip/