Как вернуть заданные входные значения, недоступные в массиве, используя запрос mongodb - PullRequest
0 голосов
/ 09 января 2019

У меня один входной массив, EX: let UPID = ["0","1","10"]. я должен проверить members.regularStudent доступны ли заданные входные значения или нет? предположим, что недоступно означает, что мне нужно нажать один массив и вернуть результаты

Мои документы:

{
    "_id" : "5bb20d7556db6915846da67f",
    "members" : {
        "regularStudent" : [
            "3",
            "4"
        ]
    }
},

{
    "_id" : "5bb20d7556db6915846da55f",
    "members" : {
        "regularStudent" : [
            "1",
            "2"
        ]
    }
}

Мой ожидаемый результат

    [
        "0",
        "10"
    ]

Мой код:

    let UPID = ["0","1","10"]
db.Groups.find(
    /*{
    "members.regularStudent": { $nin: UPIDs }
    }*/
)
.forEach(function(objects){
    print(objects)
})

Я обновил mycode, пожалуйста, смотрите вверху в моем разделе вопросов, print(objects) означает, что у меня есть мои объекты, на основе этой переменной вы можете обновить свой ответ,

** печать (объекты) **

{
    "_id" : "5bb20d7556db6915846da67f",
    "members" : {
        "regularStudent" : [
            "3",
            "4"
        ]
    }
},

{
    "_id" : "5bb20d7556db6915846da55f",
    "members" : {
        "regularStudent" : [
            "1",
            "2"
        ]
    }
}

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Здесь я использую forEach для итерации по данным, чтобы собрать все данные normalStudent в один массив, а затем с помощью фильтра отфильтровать данные из массива UPID.

const UPID = ["0", "1" , "10"]
let data = [
  {
      "_id" : "5bb20d7556db6915846da67f",
      "members" : {
          "regularStudent" : [
              "3",
              "4"
          ]
      }
  },
  {
      "_id" : "5bb20d7556db6915846da55f",
      "members" : {
          "regularStudent" : [
              "1",
              "2"
          ]
      }
  }
]
let resularStudents = []
data.forEach(d => {
  d.members.regularStudent.forEach(rs => {
    resularStudents.push(rs)
  })
})
var result = UPID.filter(
    function(d) {
      return this.indexOf(d) < 0;
    },
    resularStudents
);
console.log(result);
0 голосов
/ 09 января 2019

Вы можете использовать map метод в комбинации с filter.

let UPID = ["0","1","10"]; 
let docs = [{ "_id" : "5bb20d7556db6915846da67f", "members" : { "regularStudent" : [ "3", "4" ] } },
{ "_id" : "5bb20d7556db6915846da55f", "members" : { "regularStudent" : [ "1", "2" ] } }]

let ids = [].concat(...docs.map(elem => elem.members.regularStudent));
console.log(UPID.filter(id => !ids.includes(id)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...