如何使用$ nin排除Meteor,MongoDB,React

时间:2015-11-13 03:09:52

标签: mongodb meteor

我想在获取Object时从查询中排除对象数组。

mixins: [ReactMeteorData],
getMeteorData() {

  // Standard stuff
  var selector = {};
  var handle = Meteor.subscribe('videos', selector);
  var data = {};

  // Return data = OK!
  data.video = Videos.findOne({ _id: this.props._id });

  // Fetch objects with $lte _id to exclude, Return id_ field array = OK!
  data.excnext = Videos.find({ votes: data.video.votes, _id: {$lt: data.video._id}},{fields: {_id:1}},{sort: {_id: 1},limit:50}).fetch();

  // Fetch objects by Votes, Exclude array of objects with $nin = NOT OK!
  data.next = Videos.findOne({ _id: { $ne: this.props._id,  $nin:data.excnext }, votes: { $gte: data.video.votes}},{ sort: { votes: 1, _id: 1 }});
  return data;
},

为什么$ nin不能按预期工作? 在获取数组或使用$ ini

返回时,我不确定是否出错了

记录的示例= data.excnext

[ { _id: 'A57WgS6n3Luu23A4N' },
  { _id: 'JDarJMxPAnmeTwgK4' },
  { _id: 'DqaeqTfi8RyvPPTiD' },
  { _id: 'BN5qShBJzd6N7cRzh' },
  { _id: 'BSw2FAthNLjav5T4w' },
  { _id: 'Mic849spXA25EAWiP' } ]

使用此堆栈在我的第一个应用上磨削。我的核心设置是Meteor,Flow-router-ssr,React-layout,MongoDB,React。我想要做的是通过投票获取下一个对象,问题是有时几个对象具有相同的投票数,所以我需要按id排序并排除不需要的对象。

  • 首先,我正在寻找如何在上面的例子中使用$ nin的答案
  • 第二,建议/示例如何更好地做到这一点是受欢迎的,可能有一个更好,更简单的方法来做到这一点,信息不容易找到,没有任何以前的经验,有可能使这更复杂需要的。

//❤和平

1 个答案:

答案 0 :(得分:2)

在这种情况下,$nin需要一个id字符串数组,而不是一个具有_id字段的对象数组。试一试:

data.excnext = _.pluck(Videos.find(...).fetch(), '_id');

使用pluck提取一系列ID,然后您可以在后续findOne调用中使用这些ID。