Как запросить пару ключ: значение в MongoDb через Javascript? - PullRequest
0 голосов
/ 01 февраля 2020

Я проверил, и хотя я обнаружил, что похожие вопросы у меня разные, поскольку я использую переменный ключ.

Мои данные выглядят следующим образом:

{
  "_id": "p9AXNCtfX5AWT5jRw",
  "chr": "1",
  "cousins": [
    "B1KLeIiQE",
    "H195r77hQ4",
    "rkFnSX7n74",
    "H8P6QcQXX"
  ],
  "end": {
    "B1KLeIiQE": 26384690,
    "H195r77hQ4": 25029488,
    "rkFnSX7n74": 26384690,
    "H8P6QcQXX": 25224010
  },
  "numCousins": 4,
  "start": {
    "B1KLeIiQE": 18683049,
    "H195r77hQ4": 18643577,
    "rkFnSX7n74": 18650794,
    "H8P6QcQXX": 18643577
  }
}

Это легко получить доступ к 2 соответствующим ключам: значения объектов начало и конец в JS через gDoc.start[kitUser], где kitUser будет любой из 4 строк, присутствующих в кузены массив выше.

Так, например, запрос для вышеуказанного документа через терминал будет:

db.groups.find({
  cousins: "B1KLeIiQE",
  chr: "1",
  "start.B1KLeIiQE": {
    $lte: 35000000
  },
  "end.B1KLeIiQE": {
    $gte: 1
  }
})

, и тогда я преобразую соответствующий ключ 'B1KLeIiQE' в значение 18683049 для start и 26384690 для end .

Однако я не могу заставить работать вышеуказанный запрос в Javascript, так как не могу разрешить поле для запроса гибким способом (имеется в виду включение любого значения, которое ключ должен генерировать 'start.B1KLeIiQE', а также 'end.B1KLeIiQE').

Мой текущий (ошибочный) код выглядит следующим образом) :

const chr = '1';
const start = 1;
const end = 35000000;
const groupsArray = Groups.find({ chr, 'start.kitUser': { $lte: end }, 
'end.kitUser': { $gte: start }, cousins: kitUser }).fetch();

Я также не могу создать индекс для этих 2 объектов ключ: значение (поскольку существует ограничение 1024 1 байт на индекс, и у меня есть 1 документ, который имеет 1853 байта), но у меня есть составной индекс для двоюродных братьев и chr , который сужает результаты до применения фильтра.

Мне нравится простая структура ключа 2: объекты значений, но я открыт для предложений по изменению этого формата, чтобы я мог выполнить запрос в Javascript (Метеор).

1 Ответ

1 голос
/ 01 февраля 2020

В вашем коде есть синтаксическая ошибка, попробуйте это:

const chr     = '1';
const start   = 1;
const end     = 35000000;
const kitUser = 'B1KLeIiQE';
const query   = {};
query['chr']  = chr;
query['start.' + kitUser]  = { '$lte': end };
query['end.' + kitUser]  = { '$gte: start }; 
query['cousins']  = kitUser;
const groupsArray = Groups.find(query).fetch();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...