根据可能不存在的记录的嵌套字段对流星指针进行排序

我有这个集合,它们中的对象看起来像:

{
  name: 'Apple',listOrder: {
    default: 1,wallmart: 1
  }
  color: 'Red'
},{
  name: 'Orange',listOrder: {
    default: 2,wallmart: 3
  }
  color: 'Orange'
},{
  name: 'lemon',listOrder: {
    default: 3,wallmart: 2
  }
  color: 'Yellow'
}

我有3个水果摊,需要按正确的顺序找回它们。 我尝试了几种不同的方法来做到这一点,并且我觉得自己在正确的方向上开展工作:

function getFruit(storeName){
  var override = {check:{},sort:{}}
  override.check[`listOrder.${store}`] = {$exists:1}
  override.sort[`order.${store}`] = 1

  var sort = {sort:{$cond:{if:override.check,then:override.sort,else:{'listOrder.default':1}}}}

  return FruitsCollection.find({},sort).fetch()
}

它告诉我$ cond不是受支持的排序键。我想知道三件事:

  1. 在客户端上对它们进行排序是否会得到更好的优化?我正努力保持移动性,因此,进行这样的排序会使页面需要花费几秒钟的时间来加载,因为我不仅仅拥有这3种水果。
  2. 是否可以使用更好的排序查询?我对Mongo有点陌生。
  3. 这只是个坏主意吗?

当前正在客户端上使用它,我可以将其移到服务器上,但是它也告诉我我使用了错误的排序规范。

kyeky 回答:根据可能不存在的记录的嵌套字段对流星指针进行排序

$cond operator用在aggregation中,而不是使用.find的{​​{3}}。

Meteor本身将MongoDB驱动程序用于NodeJS,但没有直接使用(它将Mongo调用抽象为您的Meteor环境),因此您不能只调用collection.aggregate

但是,您可以使用simple query,然后手动处理所有异步操作(对于有经验的用户),也可以使用其中几个软件包之一进行适当的聚合,例如:

单个聚合:native collection via rawCollection

附有出版物的出版物:https://github.com/sakulstra/meteor-aggregate/

本文链接:https://www.f2er.com/3114036.html

大家都在问