Хобрук: Ваш путь к мастерству в программировании

Есть ли альтернатива оператору $ в Minimongo от Meteor?

Я пытаюсь запросить определенный элемент внутри массива в коллекции Meteor на стороне клиента, но Minimongo не поддерживает оператор $. Есть ли альтернатива фильтрации моего запроса, чтобы он возвращал только определенный элемент в массиве?

Моя коллекция устроена так:

{
  "userID": "abc123",
  "array": [
    {
      "id": "foo",
      "propA": "x",
      "propB": "y"
    },
    {
      "id": "bar",
      "propA": "a",
      "propB": "b"
    }
  ]
}

Я пытаюсь написать запрос, который возвращает только объект в массиве с идентификатором «foo». В Mongo этот запрос будет таким:

collection.find({
  "userID": "abc123",
  "array.id": "foo"
}, {
  "array.$": 1
});

Однако Minimongo не поддерживает оператор $ в проекциях, поэтому возникает ошибка. Я пробовал аналогично структурированные запросы, используя $elemMatch, и пробовал решение, описанное здесь но это не дает того, что я пытаюсь сделать.

Есть ли альтернативные средства запроса одного элемента в этом массиве с помощью Minimongo?


Ответы:


1

Вы можете использовать findWhere для извлечения первого подходящего объекта в массиве. Попробуйте что-нибудь вроде этого:

// Find all documents matching the selector.
const docs = Collection.find({ userId: 'x', 'array.id': 'y' }).fetch();

// For each document, find the matching array element.
for (let doc of docs) {
  let obj = _.findWhere(doc.array, { id: 'y' });
  console.log(obj);
}
23.03.2016
  • На самом деле я использовал find().fetch(), и он сделал именно то, что искал. Если вы отредактируете ответ, я отмечу его правильным. 24.03.2016
  • @JoshVickerson Посмотрите на предлагаемые правки. Мне до сих пор неясно, ищете ли вы элемент в одном или нескольких документах. 25.03.2016
  • Я ищу элемент внутри одного документа. В моем случае userId гарантированно будет уникальным, поэтому поиск должен соответствовать только одному документу. Затем мне нужен один элемент из массива в этом документе. 31.03.2016
  • Хм. Тогда я удивлен, что исходное решение не сработало: _.findWhere(Collection.findOne({userId: 'x'}).array, {id: 'y'}) 31.03.2016
  • Новые материалы

    Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
    Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

    Универсальный базовый доход
    Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

    Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
    Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

    Абсолютно имеет смысл.
    Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

    МАШИННОЕ ОБУЧЕНИЕ И EDA
    Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

    В чем основные различия между ReactJS и React-Native?
    В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

    LeetCode — Умножение строк
    Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..