Nano Hash - криптовалюты, майнинг, программирование

MongoDB: как найти (и вернуть) элементы в многомерном массиве?

Это структура JSON, обратите внимание, что в последней записи есть 2 многомерных массива, один для chr 10 и один для chr 12:

{
  "_id": "9oFvJYeG9wpdBYunu",
  "segments": [
    {
      "chr": "7",
      "start": "140422294",
      "end": "155048283",
      "length": "29.1",
      "snps": "1666"
    }
  ]
},
{
  "_id": "HK4WXc5mR6fyesjpP",
  "segments": [
    {
      "chr": "10",
      "start": "83865742",
      "end": "90981118",
      "length": "6.3",
      "snps": "1380"
    }
  ]
},
{
  "_id": "3N4Z2dtX5PiuqmCFv",
  "segments": [
    {
      "chr": "10",
      "start": "83865742",
      "end": "90981118",
      "length": "6.3",
      "snps": "1380"
    },
    {
      "chr": "12",
      "start": "32853998",
      "end": "44834540",
      "length": "5.1",
      "snps": "1623"
    }
  ]
}

Как определить все сегменты с chr = 10? Я хочу получить подробную информацию об элементах с chr = 10. Я хочу именно те элементы с chr = 10, а не все документы (со всеми остальными их сегментами), где один из элементов имеет chr = 10.

Обратите внимание, что в соответствии с документацией MongoDB как «$elemMatch», так и «$» возвращают только первое совпадение. Однако в моей коллекции есть документы, в которых есть два или более элементов с chr = 10. Я хочу получить все элементы, также в этом случае с несколькими элементами chr 10 в одном массиве.

Я хочу вернуть следующие поля:

_id, chr, start, end, length, snps

назад. Как я могу запросить это в Meteor? Я пробовал $elemMatch и $in, но безрезультатно. Если вы ответите только на этот вопрос для MongoDB, пожалуйста, сделайте это, я попытаюсь преобразовать его в Meteor Javascript.

Заранее спасибо за помощь!

P.S.: это на стороне сервера Meteor, не уверен, что это важно


  • Так ты не хочешь db.coll.find({segments: {$elemMatch: {chr: "10"}}})? 01.10.2015
  • Это может помочь stackoverflow.com/questions/3985214 01.10.2015
  • Видели ли вы, что stackoverflow.com/questions/3985214/? 01.10.2015
  • В принципе, я хочу этого, но он также возвращает все остальные элементы, если документ содержит более одного элемента. Мне нужны именно те элементы с chr = 10, а не весь документ, в котором один из элементов имеет chr = 10. Извините, нужно было сделать это яснее. 01.10.2015

Ответы:


1

вы можете попробовать найти с проекцией

Запрос

db.collection.find({"segments.chr":"10"},{"segments.$":1}).pretty()

Вывод

{
        "_id" : "HK4WXc5mR6fyesjpP",
        "segments" : [
                {
                        "chr" : "10",
                        "start" : "83865742",
                        "end" : "90981118",
                        "length" : "6.3",
                        "snps" : "1380"
                }
        ]
}
{
        "_id" : "3N4Z2dtX5PiuqmCFv",
        "segments" : [
                {
                        "chr" : "10",
                        "start" : "83865742",
                        "end" : "90981118",
                        "length" : "6.3",
                        "snps" : "1380"
                }
        ]
}

Надеюсь, это поможет

01.10.2015
  • Используется db.matches.find({ segments.chr: 10 }, {kit1:1, segments.$:1 }).sort({kit1:1}) as kit1 (ключ) идентифицирует документ с 2+ элементами в множество. Он находит оба элемента, но значения идентичны. См. здесь: {_id: ZtojR5BLoFHGoXCih, kit1: F393988, segments: [{chr: 10, start: 34068234, end: 50002936, length: 7.2, snps: 895} ] } { _id: SdhYw8gR4m9CWNHY6, kit1: 8, 939 segments: F {chr: 10, start: 34068234, end: 50002936, length: 7.2, snps: 895 } ] } 01.10.2015
  • @ a4xrbj1 - можете ли вы сказать нам, что вы хотите, приведенное выше и основанное на вашем исходном сообщении. Пожалуйста, не путайте нас 01.10.2015
  • не имеет ничего общего с тем, чтобы сбить вас с толку, но в настоящее время в базе данных 44000 документов, что невозможно показать в примере. В своем вопросе я показал, какую структуру данных я хочу вернуть, и что мне нужны ТОЛЬКО элементы из массива, которые соответствуют запросу chr = 10, а не те, которые не соответствуют. Если массив имеет более одного элемента с соответствующими критериями, я хочу вернуть все эти элементы. 02.10.2015
  • Не могли бы вы взглянуть docs.mongodb.org/manual/ учебник/ надеюсь, что это поможет. Ура Рохит 02.10.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..