MongoDB=>findOne还是find查询下一个对象?(Meteor/React)

MongoDB => findOne or find querying next object? ( Meteor / React )

本文关键字:一个对象 Meteor React 查询 gt findOne find 还是 MongoDB      更新时间:2023-09-26

想要查找与当前对象相关的下一个和上一个对象。

这就是我拥有的

this.props._id = currentId;
// Fetch current object data
data.video = Videos.findOne({_id: this.props._id});
// Using votes string from object above to find me objects 
data.next = Videos.findOne({votes: {$gte: data.video.votes}});
data.previous = Videos.findOne({votes: {$lte: data.video.votes}};

我知道这是不正确的,当然它会返回对象,但它不会是最近的对象,我也有机会返回当前对象。

我想做的是返回我的选择器是投票的下一个或上一个对象,我还想确保使用Id来排除当前对象,然后几个对象也很有可能具有相同的投票数。

我已经连续做了12个小时了,现在已经回到了我开始的地方,所以我真的很感激一些例子让我思考这个问题,不再确定我应该使用find还是findOne。

这是完整的代码

VideoPage = React.createClass({
  mixins: [ReactMeteorData],
  getMeteorData() {
    var selector = {};
    var handle = Meteor.subscribe('videos', selector);
    var data = {};
    data.userId = Meteor.userId();
    data.video = Videos.findOne({_id: this.props._id});
    data.next = Videos.findOne({votes: {$gte: data.video.votes}});
    data.previous = Videos.findOne({votes: {$lte: data.video.votes}};
    console.log(data.video.votes);
    console.log(data.video);
    console.log(data.next);
    console.log(data.previous);

    return data;
  },

  getContent() {
    return <div>
    {this.data.video.votes}
      <Youtube video={this.data.video} />
    <LikeBox next={this.data.next._id} previous={this.data.previous._id} userId={this.data.userId} video={this.data.video} />
    </div>
    ;
  },

  render() {
    return <div>
      {(this.data.video)? this.getContent() :
        <Loading/>
      }
    </div>;
  }
});

您需要:

  • 排除当前id
  • 按适当的方向排序
  • 只选择一个结果

js:

data.video = Videos.findOne({ _id: currentId });
// object with next highest vote total
data.next = Videos.findOne({ _id: { $ne: currentId },
  votes: { $gte: data.video.votes }},{ sort: { votes: 1 }});
// object with next lowest vote total
data.previous = Videos.findOne({ _id: { $ne: currentId },
  votes: { $lte: data.video.votes },{ sort: { votes: -1 }});