#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. «Ошибка типа: условный $и требует массива» сейчас появится