根据可能不存在的记录的嵌套字段对流星指针进行排序
Sorting a meteor pointer based on a record's nested field that may not exist
我有这个 collection,其中的 objects 看起来像:
{
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 不是受支持的排序键。我想知道 3 件事:
- 在客户端对它们进行排序会不会优化得更好?我试图牢记移动设备,因此,像这样排序会使页面加载需要几秒钟,因为我拥有的不仅仅是这 3 种水果。
- 有没有更好的排序查询可供我使用?我对 Mongo 有点陌生。
- 这只是一个普遍的坏主意吗?
这目前正在客户端上使用,我可以将它移到服务器上,但它也告诉我我使用了错误的排序规范。
$cond
operator is used in an aggregation, which is not a simple query 使用 .find
。
Meteor 本身使用 NodeJS 的 MongoDB 驱动程序但不是直接使用(它为您抽象了 Mongo 对 Meteor 环境的调用),所以您不能只调用 collection.aggregate
.
但是,您可以使用 native collection via rawCollection
然后手动处理所有异步操作(对于更有经验的用户),或者使用几个包之一进行适当的聚合,例如:
单个聚合:https://github.com/sakulstra/meteor-aggregate/
聚合的出版物:https://github.com/robfallows/tunguska-reactive-aggregate/
我有这个 collection,其中的 objects 看起来像:
{
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 不是受支持的排序键。我想知道 3 件事:
- 在客户端对它们进行排序会不会优化得更好?我试图牢记移动设备,因此,像这样排序会使页面加载需要几秒钟,因为我拥有的不仅仅是这 3 种水果。
- 有没有更好的排序查询可供我使用?我对 Mongo 有点陌生。
- 这只是一个普遍的坏主意吗?
这目前正在客户端上使用,我可以将它移到服务器上,但它也告诉我我使用了错误的排序规范。
$cond
operator is used in an aggregation, which is not a simple query 使用 .find
。
Meteor 本身使用 NodeJS 的 MongoDB 驱动程序但不是直接使用(它为您抽象了 Mongo 对 Meteor 环境的调用),所以您不能只调用 collection.aggregate
.
但是,您可以使用 native collection via rawCollection
然后手动处理所有异步操作(对于更有经验的用户),或者使用几个包之一进行适当的聚合,例如:
单个聚合:https://github.com/sakulstra/meteor-aggregate/
聚合的出版物:https://github.com/robfallows/tunguska-reactive-aggregate/