В моем метеора приложение, у меня есть огромная коллекция документов, каждый из которых с полем tags
, в основном, как это:MongoDB: найти документы, которые соответствуют большинству тегов
{..., tags: ["a","b","c"], ...},
{..., tags: ["a","b","d"], ...},
{..., tags: ["b","c","e"], ...},
{..., tags: ["x","y","z"], ...},
....
Теперь я хочу, чтобы запросить коллекцию на сервер с некоторыми тегами, например: ["a","d","y"]
, и получить все результаты, которые соответствуют хотя бы одному тегу, и набор результатов отсортирован по количеству совпадающих тэгов. Так, в ExampleSet результат должен быть:
{..., tags: ["a","b","d"], ...},
{..., tags: ["a","b","c"], ...},
{..., tags: ["x","y","z"], ...}
, поскольку первый документ имеет два матча, "a"
и "d"
, а остальные два элемента имеют один матч, "a"
и "y"
.
В настоящее время я знаю, что могу использовать $in
для соответствия всем документам, имеющим по крайней мере одно совпадение, $all
, чтобы получить все документы, в которых соответствует каждый тег, но это никоим образом не режет. При необходимости я мог бы использовать общую структуру mongoDB.
Как будет выглядеть запрос?
работает отлично! благодаря! – Hisako
Most Welcome. ;-) В качестве побочного вопроса, почему вы выбираете meteor over nodejs, когда метеор имеет очень ограниченную поддержку агрегации? – BatScream
https://atmospherejs.com/meteorhacks/aggregate <- например. Агрегация в Meteor работает нормально. Точка использования Meteor - это концепция моего приложения * кроме * этого запроса. Многие клиент-тяжелые вычисления распределены по активным пользователям и (мягкие) возможности в реальном времени. (сводный агрегатор новостей). – Hisako