根据时间优先差异汇总文档

时间:2019-04-24 10:23:51

标签: mongodb mongodb-query aggregation-framework

我正在尝试根据自组中第一个文档以来的时差汇总文档。需要将所有存储在数据库中的文档在第一次存储后的10秒内进行分组,存储在10秒后的文档将在下一组中,依此类推。

这看起来像

group1:带有时间戳的文档<该组中第一个文档的时间戳+10000

group2:带有时间戳的文档<该组中第一个文档的时间戳+ 10000 ...

我们需要它来分析此时间间隔内的最大值,因为只有该时间段内的最大值才有意义。

我到目前为止尝试过的代码尚不可用。

我尝试的公式是: 当前-(分钟+下限((当前-分钟)/ 10000)* 10000-当前模块最小值)

当前是当前文档的时间

min是该组中的最短时间

floor和mod是Mongodb的floor和mod功能。

{this.renderMaxTotal()}

当前输出为:

onChange handler

文档如下:

 class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
      library: null,
    };
  }
  componentDidMount() {
    fetch("/json.bc", {
      method: "get"
    })
      .then(response => response.text())
      .then(text => {
        let Maindata = JSON.parse(text.replace(/\'/g, '"'));
        this.setState(
          state => ({
            ...state,
            data: Maindata
          }),
          () => {
            this.reorganiseLibrary();
          }
        );
      })
      .catch(error => console.error(error));
  }

  reorganiseLibrary = () => {
    const { data } = this.state;
    let library = data;
    library = _.chunk(library);
    this.setState({
      library,

    });
  };
  handlePerPage = evt =>
    this.setState(
      {
        perPage: evt.target.value
      },
      () => this.reorganiseLibrary()
    );

  renderMinTotal = () => {
    const { library } = this.state;
    if (!library || (library && library.length === 0)) {
      return "";
    }
    return library.reduce((acc, lib) => {
      const libMin = Math.min(...lib.map(item => item.totalCom));
      return acc === undefined ? libMin : libMin < acc ? libMin : acc;
    }, undefined);
  };

  renderMaxTotal = () => {
    const { library } = this.state;

    if (!library || (library && library.length === 0)) {
      return "";
    }
    return library.reduce((acc, lib) => {
      const libMax = Math.max(...lib.map(item => item.totalCom));
      return libMax > acc ? libMax : acc;
    }, 0);
  };

 handlerChange = evt =>{
    let value = evt.target.value
 ///what should be written here///////
 }

  render() {
    const { library } = this.state;
    return (
      <div>
        <div>
          <input
            type="range"
            min={this.renderMinTotal()}
            max={this.renderMaxTotal()}
            value={this.renderMaxTotal()}
            step="1000"
            className="multirange"
           onChange={this.handlerChange}
          />
        </div>
    </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('Result'))

0 个答案:

没有答案