Задать вопрос
@asfhn

Как найти пользователя у которого в массиве обьектов есть обьекты с оперелнным id?

Есть пользователь
{
 id: 1,
 items: [{
  id: 124,
  price: 1
 },{
  id: 31
  price: 1
 },{
  id: 32,
  price: 1
 }]
}

и есть массив
ids = [32, 124]
И надо через User.findOne() найти пользователя у которого в items есть все элементы из массива id?
Можно ли так сделать или просто найти пользователя по id и уже проверить самому.
Я просто не знаю как лучше делать сразу при запросе или уже циклом проходить по полученному массиву
  • Вопрос задан
  • 254 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
hzzzzl
@hzzzzl
https://docs.mongodb.com/manual/reference/operator...

попробуй

User.findOne({ 'items.id': { $all: ids } })
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Azperin
Дилетант
var users = [
	{
		id: 1,
		items: [
			{ id: 124, price: 1 },{ id: 31, price: 1 },{ id: 32, price: 1 },
		],
	},
	{
		id: 2,
		items: [
			{ id: 345, price: 1 },{ id: 2, price: 1 },{ id: 166, price: 1 },
		],
	},
];

function usersFindOne(itemsArr) {
	return users.find(u => {
		return u.items.every(item => itemsArr.includes(item.id));
	});
};

console.log(usersFindOne([124, 32, 31]));
console.log(usersFindOne([345, 111, 166, 2]));

Я бы сделал примерно так, если не важно есть ли в массиве "лишние" id
Ответ написан
Комментировать
Alexandre888
@Alexandre888
Javascript-разработчик
Я просто не знаю как лучше делать сразу при запросе или уже циклом проходить по полученному массиву

соорудил велосипед с циклом:
let obj = {
  id: 1,
  items: [{
    id: 124,
    price: 1
  }, {
    id: 31,
    price: 1
  }, {
    id: 32,
    price: 1
  }]
};

let arr = [];

let ids = [32, 31, 124]

for (let i = 0; i < Object.keys(obj.items).length; i++) {
  for (let key in obj.items) {
    arr.push(obj.items[i].id)
  }
}

let unique = new Set(arr)

let new_arr = [...unique]

let coincidences = 0;

for (let i = 0; i < ids.length; i++) {
  if (ids.includes(new_arr[i])) coincidences++
}

if (coincidences === new_arr.length) {
  alert("У пользователя в items есть все элементы из массива ids")
} else {
  alert("У пользователя в items нету всех элементов из массива ids")
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы