База данных Мангуста — Поиск внутри массива

#node.js #mongoose

#node.js #мангуст

Вопрос:

У меня есть следующие данные в коллекции мангустов:

 {  map: 'Sydney',  Postcode: 2000,  mapItems: [  {  team: 'NONE',  teamIcon: 20,  x: 0.6092914,  y: 0.28168318,  flags: 0  },  {  team: 'Alpha',  teamIcon: 33,  x: 0.63026464,  y: 0.41642973,  flags: 0  },  {  team: 'Bravo',  teamIcon: 20,  x: 0.63026464,  y: 0.41642973,  flags: 0  },  {  team: 'Alpha',  teamIcon: 20,  x: 0.63026464,  y: 0.41642973,  flags: 0  }  }  

Я пытаюсь вернуть только те элементы карты, у которых команда «Альфа», а teamIcon-33 или 52.

 dyDB  .find({  $or: [  {  "mapItems.teamIcon": 33,  },  {  "mapItems.teamIcon": 52,  },  ],  $and: [  {  "mapItems.teamId": "Alpha" },  },  ],  })  .then((data) =gt; {  for (const dyn of data) {  console.log(dyn);  }  });  

Но он просто возвращает все и, похоже, не фильтрует это. Я не знаю, что еще попробовать. Кто-нибудь может дать несколько советов?

Ответ №1:

Вы должны использовать or внутри and :

 dyDB.find({  mapItems: {  $elemMatch: {  $and: [  { $or: [{ teamIcon: 52 }, { teamIcon: 33 }] },  { team: "Alpha" },  ],  },  },  })  .then((data) =gt; {  for (const dyn of data) {  console.log(dyn);  }  });  

Комментарии:

1. Он по-прежнему возвращает все, ничего не фильтруется.

2. @Yesman, оператор точки удален, вы можете проверить сейчас

3. Теперь я получаю MongoServerError: неизвестный оператор: $и

4. @Yesman, я исправил синтаксис, можешь попробовать сейчас

5. «Ошибка типа: условный $и требует массива» сейчас появится