Минимальное и максимальное значения массива как $ lte $ gte - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть массив, например [3,4].Затем я хотел бы выполнить поиск в моем objectArray, чтобы увидеть, совпадают ли какие-либо числа в моем массиве с диапазоном кроватей (от -> до) в objectArray.Только одно из чисел в моем массиве должно совпадать.

var objectArray = 
[
    {
        id: 1,
        customRange: {
            bed: {
                from: 2,
                to: 4
            }
        }
    },
    {
        id: 2,
        customRange: {
        bed: {
            from: 1,
            to: 5
        }
    }
    },
        {
            id: 3,
            customRange: {
            bed: {
                from: 1,
                to: 2
            }
        }
    }
];

Я не хочу использовать $ где из-за производительности.Есть ли что-то подобное?Предположим, что params.beds = [3,4]

db.properties.find({
  $elemMatch: {
    "customRange.bed.from": {$gte: {$in: params.beds}},
    "customRange.bed.to": {$lte: {$in: params.beds}}
  }
})

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Одним из решений является использование filter () в сочетании с find () , чтобы проверить, можем ли мы найти элемент, удовлетворяющий указанному условию:

const input = [
  {
    id: 1,
    customRange: {bed: {from: 2, to: 4}}
  },
  {
    id: 2,
    customRange: {bed: {from: 1, to: 5}}
  },
  {
    id: 3,
    customRange: {bed: {from: 1, to: 2}}
  }
];

let searchBeds = [3, 4];

let res = input.filter(
    ({customRange}) => searchBeds.find(
        x => (x >= customRange.bed.from) && (x <= customRange.bed.to)
    )
);

console.log(res);
0 голосов
/ 12 февраля 2019

Вы можете использовать запрос ниже, используя $expr

db.collection.find({
  "$expr": {
    "$or": [
      { "$gte": ["$customRange.bed.from", { "$min": [3, 4, 6] }] },
      { "$lte": ["$customRange.bed.from", { "$max": [3, 4, 6] }] },
      { "$gte": ["$customRange.bed.to", { "$min": [3, 4, 6] }] },
      { "$lte": ["$customRange.bed.to", { "$max": [3, 4, 6] }] }
    ]
  }
})
0 голосов
/ 11 февраля 2019

Вы можете использовать Фильтр и Некоторые

let data = [{ id: 1, customRange: {  bed: { from: 2,to: 4}}},{id: 2,customRange: { bed: { from: 1, to: 5 }}},{id: 3,customRange: { bed: { from: 1, to: 2 }}}]

let search = [3,4]

let op = data.filter(( {customRange: {bed: {from, to }}} ) => {
    return search.some(e => e >= from && e <= to)
  })
  
  console.log(op)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...