2016-06-17 3 views
0

У меня есть две коллекции в проекте Метеор, свободно созданные как это:Заказать метеор найти результаты по индексу в массиве

ItemContainer.insert({ 
    title: title, 
    items: [], 
}); 

Items.insert({ 
    title: title, 
}); 

Всякий раз, когда новый Item создается это идентификатор добавляется в items массив в ItemContainer.

У меня также есть помощник, как это:

Template.body.helpers() { 
    items() { 
    const instance = Template.instance(); 
    const containerId = instance.state.get("currentContainer"); 
    const theseItems = ItemContainer.find({ _id: containerId}).items; 
    return Items.find({ _id: { $in: items } }); 
    } 
} 

Вопрос заключается в том, что я хочу, чтобы отсортировать элементы, которые я возвращаю их индекс в массиве элементов. Поэтому, когда я создаю список элементов в браузере, сначала выводится элемент, чей идентификатор находится на items[0], а затем items[1] и так далее. К сожалению, я не могу найти простое решение в документах Mongo.

Я могу придумать некоторые способы сделать это, например, построить объект путем итерации по массиву элементов и вернуть его, но я должен представить себе, что есть более простой способ. Также возможно, что количество предметов вырастет достаточно велико, теоретически тысячи или десятки тысяч.

Кто-нибудь знает простой способ сортировки по индексу массива?

+0

Ммм ... Я, возможно, нашли решение: https://docs.mongodb.com/manual/tutorial/sort-results-with-indexes/ ....... Но я не уверен. Не сможет попробовать это позже. – terrafirma9

ответ

0

Вы можете попытаться сортировать товары в порядке возрастания при поиске через ItemContainer. Так что детали возвращают правильный заказ.

const theseItems = ItemContainer.find({ _id: containerId}).sort({"items.0": 1}).items; 
+0

Итак, если массив 'items' отсортирован перед переходом в' Items.find() ', то результаты также должны появиться в порядке? Это было бы прекрасно! Я попробую позже. – terrafirma9

Смежные вопросы