Вложенный массив поиска Mongoose / Mongodb путем сравнения с другим массивом - PullRequest
0 голосов
/ 14 июля 2020

У меня есть массив идентификаторов, и я хочу найти вложенную опору в mongodb, чтобы узнать, существует ли какой-либо из этих идентификаторов.

База данных выглядит так. alertDetails - это массив, и он содержит объекты, у этих объектов есть поле идентификатора, и я хочу проверить все эти идентификаторы по моему массиву идентификаторов

  {
    status: string,
    openDate: date,
    alertType: [],
    severity: [],
    locationName: [],
    alertDetails: [
       {_id:5f0b4f508bda3805754ab343,
         }
],

Этот код ниже не работает. Возвращает пустой массив

  let ids = [
    '5f0b4f508bda3805754ab343',
    '5f0b4f508bda3805754ab33f',
    '5f0b4f4f8bda3805754ab33b',
    '5f0b4f4f8bda3805754ab336',
    '5cdd5f00d5233209d7800c27',
    '5cdd568ed5233209d77fe464',
    '5cdd32d7d5233209d77f4bf8',
    '5cd58793d5233209d75f9d00',
  ];

  G2Alerts.find({ 'alertsDetails._id': { $in: ids } }, (err, user) => {
    console.log(err, user);
  });

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

  G2Alerts.aggregate([
    {
      $project: {
        exists: {
          $in: [ids, '$alertDetails._id'],
        },
      },
    },
  ]).exec((err, alert) => {
    if (err) {
      res.send(err);
    }
    res.send(alert);
  });

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Вот как мне это удалось.

  let ids = [
    '5f0b4f508bda3805754ab343',
    '5f0b4f508bda3805754ab33f',
    '5f0b4f4f8bda3805754ab33b',
    '5f0b4f4f8bda3805754ab336',
    '5cdd5f00d5233209d7800c27',
    '5cdd568ed5233209d77fe464',
    '5cdd32d7d5233209d77f4bf8',
    '5cd58793d5233209d75f9d00',
  ];



const existing = await G2Alerts.find({ 'alertDetails._id': { $in: ids } }).distinct(
        'alertDetails._id',
        (err, alerts) => {
          if (err) {
            res.send(err);
          }
          return alerts;
        },
      );
0 голосов
/ 14 июля 2020

, если тип alertDetails._id - ObjectId, попробуйте

const pmongo = require('promised-mongodb');

{ $in: ids.map(key => pmongo.ObjectId(key.toString()))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...